gpt4 book ai didi

C++ 对象创建时没有使用 new 关键字,但在构造函数中使用了 new 关键字

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:46 28 4
gpt4 key购买 nike

如果我创建一个对象时没有使用 new 关键字,例如“Object s(someval)”,但该对象的构造函数使用了 new,当该对象超出范围时,是否会调用析构函数为其分配新的空间?我感觉好像是,但我不确定。

最佳答案

让我们给对象命名,好吗?

struct A {
A() b(new B) {}
B* b;
C c;
};

A a;

在这里,a 的析构函数 调用。 A::c 的析构函数也是如此(当 a 被析构时会自动调用)。

但是,*A::b 的析构函数被调用——实际上,指针对象 A::b 本身 已正确释放,但由于它是原始类型(它是指针!),因此什么也没有发生。但是,pointee *A::b 需要通过调用 delete 手动销毁(并释放其内存)。

关于C++ 对象创建时没有使用 new 关键字,但在构造函数中使用了 new 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854741/

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