我正在尝试理解用C++编写的其他人的代码,但是我从未见过构造函数的奇怪用法.代码如下所示:
A* a = new A(some initial values...);
...
B* b = new (a) B(some initial values...);
Run Code Online (Sandbox Code Playgroud)
初始化变量时b,(a)在new和之间B(...).这是什么意思?
代码行:
B* b = new (a) B(some initial values...);
Run Code Online (Sandbox Code Playgroud)
正在使用"放置新".
默认行为; 它在与对象B相同的内存位置创建类型的新对象a.如果对于placement new有相关的重载,那么行为将在重载中编码,这也可能包括一些默认类型行为.
在需要与任何过载被视为代码,对象的存储器布局,以及如何类A和B彼此相关.
在先前创建的对象的位置上创建对象是不常见的.我想在这里介绍的这两个代码之间有一些代码解构(但仍然将内存"分配")前一个对象,a然后再构造新的对象.
该isocpp FAQ对使用这一技术及其危险的一些进一步的建议.