gpt4 book ai didi

C++,是否可以直接调用构造函数,而不需要new?

转载 作者:IT老高 更新时间:2023-10-28 14:01:05 28 4
gpt4 key购买 nike

如果我已经有对象的内存,我可以不使用 new 显式调用构造函数吗?

class Object1{
char *str;
public:
Object1(char*str1){
str=strdup(str1);
puts("ctor");
puts(str);
}
~Object1(){
puts("dtor");
puts(str);
free(str);
}
};

Object1 ooo[2] = {
Object1("I'm the first object"), Object1("I'm the 2nd")
};

do_smth_useful(ooo);
ooo[0].~Object1(); // call destructor
ooo[0].Object1("I'm the 3rd object in place of first"); // ???? - reuse memory

最佳答案

有点。您可以使用placement new使用已分配的内存运行构造函数:

 #include <new>

Object1 ooo[2] = {Object1("I'm the first object"), Object1("I'm the 2nd")};
do_smth_useful(ooo);
ooo[0].~Object1(); // call destructor

new (&ooo[0]) Object1("I'm the 3rd object in place of first");

所以,您仍在使用 new 关键字,但没有进行内存分配。

关于C++,是否可以直接调用构造函数,而不需要new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494471/

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