c++ - C++中构造函数的奇怪使用

标签 c++ constructor

我试图理解其他人用 C++ 编写的代码,但构造函数有一种我从未见过的奇怪用法。代码如下所示:

A* a = new A(some initial values...);
...
B* b = new (a) B(some initial values...);

当初始化变量b 时,newB(...) 之间有(a)。这是什么意思?

最佳答案

代码行:

B* b = new (a) B(some initial values...);

正在使用 "placement new" .

默认行为;它在与对象 a 相同的内存位置创建类型为 B 的新对象。如果新放置有关联的重载,则行为将与重载中的编码相同,其中也可能包括一些默认类型行为。

代码需要考虑任何重载、对象的内存布局以及类 AB 之间的关系.

在先前创建的对象的位置上创建对象是不常见的。我想这两者之间有一些代码解构(但仍然保留内存“分配”)前一个对象 a 在它的位置构造新对象之前。

isocpp FAQ对这种技术的使用及其危险有一些进一步的建议。

关于c++ - C++中构造函数的奇怪使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061687/

相关文章:

c++ - 如何使用互斥锁或条件变量来设计这个(C++)?

c++ - Make -Wshadow 忽略初始化列表

c# - 使用析构函数分离事件

c++ - 重载构造函数以处理不同的数据类型

c++ - 将 C++ 类转换为 C 结构(以及更多)

c++ - 有没有办法弃用命名空间?

c++ - 标准化 1MB 文本文件的最有效方法?

c++ - 类成员函数返回的任意值

c++ - 为什么带有花括号初始化器列表的构造函数/虚拟析构函数不起作用?

java - 从具有 Java 构造函数抛出异常的类进行子类化