我一直在尝试了解Placement新概念。我在互联网上搜索了一些示例。利用所有这些信息,我自己创建了一个示例,代码如下:
#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;
class MyClass
{
private:
size_t num;
public:
~MyClass(void) { cout<<"DESTRUCTOR"<<endl; };
void print(void) { cout<<num<<endl; };
void set(size_t num) { this->num = num; };
};
int main(void)
{
/** Just a little test */
MyClass* myClass = new MyClass;
myClass->set(32);
myClass->print();
delete myClass;
/***/
//Placement new code sample.
char* memAlloc = new char[sizeof(MyClass)];
cout<<"memAlloc : "<<&memAlloc<<endl;
MyClass* ptr = new(memAlloc) MyClass;
ptr->set(95);
ptr->print();
cout<<"ptr : "<<ptr<<endl;
ptr->~MyClass();
delete[] memAlloc;
return 0;
}
据我了解,ptr将使用由memAlloc分配的内存以及新的位置。在这种情况下,memAlloc和ptr在内存中将具有相同的地址吗?我尝试打印它(您肯定会看到),但是得到了不同的结果。在gcc 4.4.1中使用Code Blocks IDE:
memAlloc : 0x22ff04
ptr : 0x2e1038
这可能吗?我打印的方式错误吗?
非常感谢您的任何建议。
最佳答案
您正在打印变量memAlloc
的地址,而不是指针的值。
将cout<<"memAlloc : "<<&memAlloc
替换为cout<<"memAlloc : "<< (void*)memAlloc
。