我试图理解其他人用 C++ 编写的代码,但构造函数有一种我从未见过的奇怪用法。代码如下所示:
A* a = new A(some initial values...);
...
B* b = new (a) B(some initial values...);
当初始化变量b
时,new
和B(...)
之间有(a)
。这是什么意思?
最佳答案
代码行:
B* b = new (a) B(some initial values...);
正在使用 "placement new" .
默认行为;它在与对象 a
相同的内存位置创建类型为 B
的新对象。如果新放置有关联的重载,则行为将与重载中的编码相同,其中也可能包括一些默认类型行为。
代码需要考虑任何重载、对象的内存布局以及类 A
和 B
之间的关系.
在先前创建的对象的位置上创建对象是不常见的。我想这两者之间有一些代码解构(但仍然保留内存“分配”)前一个对象 a
在它的位置构造新对象之前。
isocpp FAQ对这种技术的使用及其危险有一些进一步的建议。
关于c++ - C++中构造函数的奇怪使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061687/