在阅读放置新操作员时发现以下代码。删除内部或外部的位置删除
#include <iostream>
using namespace std;
class MyClass {
public:
// Placement new operator
void* operator new (size_t sz, void* v) {
cout << "Placement new invoked" << endl;
return v;
}
~MyClass() {
// Cleanup
}
};
int main()
{
// Create a buffer to store the object
int buffer[16];
cout << "Starting address of my buffer = " << &buffer << endl;
// Create the object. Use placement new
MyClass* obj = new (buffer) MyClass();
cout << "Location of my object = " << obj << endl;
// Don't delete object created with placement delete
// Call the destructor explicitly
obj->~MyClass();
}
我不得不删除其使用放置新创建的对象相关的几个问题:
- 什么是清理代码需要在析构函数写为这是在被占领的OBJ 可用内存缓冲存储器。
- 是否需要定义放置删除,如果是,是否需要在析构函数内或析构函数外。如果它在析构函数外部如何被调用?
你只需要显式调用析构函数。没有任何地点删除。 (但请注意,如果底层缓冲区已分配,则可能需要删除..) – 2014-09-22 16:25:34
阅读发布代码末尾的两行注释 – 2014-09-22 16:26:28
没有放置 - 删除 – CashCow 2014-09-22 16:33:54