内存重用意味着什么?例如,我们已经创建和对象。
struct A { };
A *a = new A;
void *p = operator new(sizeof(A),a); //Is it memory reusing?
void *p = realloc(sizeof(A),a); //Is it memory reusing?我提出这个问题,是因为第3.8/6条的例子令我感到困惑。例子:
#include <cstdlib>
struct B {
virtual void f();
void mutate();
virtual ~B();
};
struct D1 : B { void f(); };
struct D2 : B { void f(); };
void B::mutate() {
new (this) D2; //1, reuses storage — ends the lifetime of *this
f(); // undefined behavior
... = this; // OK, this points to valid memory
}也就是说,在//1中,我们首先调用重用内存的placement-new,然后再构造一个新的对象。对吗?
发布于 2014-09-07 12:09:27
存储重用发生在对对象占用的任何内存进行任何写入时,而该写入不是通过与布局兼容的类型执行的(基本上是严格的混叠,但您最好不要使用字符类型的异常来覆盖对象中不可复制的部分)。
使用新位置来构造新对象是一个例子,但另一个例子是使用memcpy在其之上复制另一个对象。
发布于 2014-09-05 05:52:56
在这里,存储重用仅仅意味着新对象是在this指向的地址上构造的,不管它在哪里。换句话说,没有为对象分配新的内存。
realloc()不是一个内存重用工具,因为它会导致分配一个新的块。此外,您的示例有未定义的行为,因为不能对使用realloc()分配的内存使用new。
https://stackoverflow.com/questions/25679285
复制相似问题