gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:01 26 4
gpt4 key购买 nike

我试图理解其他人用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com