4

当我用操作符删除某个对象delete,然后用new操作符再次创建时,如何保证该对象将创建在同一个内存位置?

一些例子:

Object* obj = new Object(5);
delete obj;
Object* obj = new Object(2);
4

4 回答 4

6

什么是对象将在同一内存位置创建的保证?

没有任何此类保证。

但是,您有时会在某些情况下看到在内存中的同一位置创建的下一个对象。特别是,在 MSVC 调试版本中,您可能会经常看到这种情况。但是你永远不应该依赖这种行为。当你认为它运行良好时,它就会停止发生,而且它永远不会保证发生。

如果您确实需要在内存中的同一位置创建对象,则有一种 C++ 机制,称为“ placement new ”。但是我必须警告您——使用它有点棘手,因为您必须先建立一个缓冲区,然后将您的对象放置在那里,然后在创建下一个对象之前自己显式调用析构函数。完成后,您必须销毁缓冲区。更不用说对齐问题,这会使事情复杂化到另一个层面。

使用placement-new时有很多错误和错误的机会,代码可能难以维护,而您真正需要此功能的时候在正常编程中极为罕见。只要我一直在专业地做 C++,我一方面可以数出我需要placement-new 的次数。

如果您不绝对肯定地知道您需要placement-new,那么您就不需要它。

于 2013-08-02T14:14:46.073 回答
5

什么是对象将在同一内存位置创建的保证?

一个都没有。

于 2013-08-02T14:08:16.393 回答
1

你不能用 new 但如果你想在内存中手动分配它你可以,但不是很实用。以下是更多信息: C++ 指针:更改内容而不更改地址?

于 2013-08-02T14:12:46.270 回答
0

如果要在旧对象的内存空间中重新生成项目,请查看memset.

于 2013-08-02T14:11:53.430 回答