C++ 中的 new 运算符有很多面孔,但我对放置 new 感兴趣。
假设您在特定的内存位置分配内存
int memoryPool[poolSize*sizeof(int)];
int* p = new (mem) int; //allocates memory inside the memoryPool buffer
delete p; //segmentation fault
在这种情况下如何正确释放内存?
如果我使用名为 myClass 的类来代替内置类型 int 会怎样?
myClass memoryPool[poolSize*sizeof(myClass )];
myClass * p = new (mem) myClass ; //allocates memory inside the memoryPool buffer
delete p; //segmentation fault
感谢您的帮助。
在第一种情况下,使用新的放置是没有意义的,因为int
没有构造函数。
在第二种情况下,它要么毫无意义(如果myClass
是微不足道的)或错误,因为数组中已经有对象。
您可以使用放置 new 来初始化内存块中的对象,该对象必须适当对齐,并且不得已包含(非平凡的)对象。
char memory[enough_bytes]; // WARNING: may not be properly aligned.
myClass * c = new (memory) myClass;
完成后,您需要通过调用其析构函数来销毁该对象:
c->~myClass();
这将对象的生命周期与其内存的生命周期分开。您可能还必须在某个时候释放内存,具体取决于您分配内存的方式;在本例中,它是一个自动数组,因此当它超出范围时会自动释放。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)