gpt4 book ai didi

c++ - 为什么 C++ 默认析构函数不破坏我的对象?

转载 作者:IT老高 更新时间:2023-10-28 12:46:24 25 4
gpt4 key购买 nike

C++ 规范说默认析构函数会删除所有非静态成员。然而,我无法做到这一点。

我有这个:

class N {
public:
~N() {
std::cout << "Destroying object of type N";
}
};

class M {
public:
M() {
n = new N;
}
// ~M() { //this should happen by default
// delete n;
// }
private:
N* n;
};

然后这应该打印给定的消息,但它没有:

M* m = new M();
delete m; //this should invoke the default destructor

最佳答案

是什么让你认为 n 指向的对象默认应该被删除?默认析构函数会销毁指针,而不是它指向的对象。

编辑:我会看看我是否可以让这更清楚一点。

如果你有一个本地指针,并且它超出了范围,你会期望它指向的对象被销毁吗?

{
Thing* t = new Thing;

// do some stuff here

// no "delete t;"
}

t 指针被清除,但它指向的 Thing 没有。这是一个泄漏。你的类里面也发生了同样的事情。

关于c++ - 为什么 C++ 默认析构函数不破坏我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403020/

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