Wae*_*elJ 2 c++ destructor explicit-destructor-call
虽然我知道这可能不是最好的想法,但我假设:
(即定义行为)手动调用对象的析构函数,然后将内存重用于另一个对象是否合法?
定义:
class A {
int a, b, c;
A() {}
~A() {}
}
A createObject() {
A object;
return object;
}
Run Code Online (Sandbox Code Playgroud)
码:
A* object = new A();
// Use object...
object->~A();
*object = createObject();
Run Code Online (Sandbox Code Playgroud)
您无法像正在执行的那样在已销毁的对象上调用赋值运算符.至少一般情况下,虽然它可能适用于某些类型.你能做的就是:
A* object = new A();
object->~A();
// Placement new.
// Constructs a new object in the memory pointed to by object pointer.
// Doesn't allocate memory.
new (object) A(createObject());
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用placement new来构造该内存中不同类型的对象,只要它们适合.只要确定两件事:
delete在它指向的对象上调用析构函数之后,不要调用指针,直到你在其位置重新构造一个对象(相同类型).| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |