gpt4 book ai didi

c++ - 类在另一个类中初始化,它如何生存?

转载 作者:行者123 更新时间:2023-11-28 00:51:25 26 4
gpt4 key购买 nike

所以我有一个名为 List 的类,它存储指向 Object 类型类的指针 vector 。 List 有一个名为 add 的函数,它初始化一个 Object 类并将它的指针添加到 vector 中。我以为一旦 add 函数结束,Object 类就会被销毁,访问指针会导致异常。当我编写测试程序对此进行测试时,结果发现 Object 类从未被销毁。

一旦函数结束,函数内部初始化的类是否会被销毁?

类什么时候自动销毁?

最佳答案

取决于您如何创建对象。如果你这样做:

void add() {
Object obj;
vec.push_back(&obj);
}

那么你正在创建obj具有自动存储期限。这意味着它将在 add 时被销毁。函数结束。您插入 vector 的指针将不再指向有效的 Object ,所以绝对不要这样做。

但是,您可能会这样做:

void add() {
Object* obj = new Object();
vec.push_back(obj);
}

如果是,则您正在创建 Object具有动态存储持续时间,并且它不会在函数结束时被销毁。您插入 vector 的指针将保持有效。但是,如果你这样做,你需要记住 delete对象在稍后的时间。如果不这样做,就会发生泄漏。

如果可以的话,最好的选择是完全避免使用指针。只需将 vector 设为 std::vector<Object>并将对象复制到其中:

void add() {
vec.push_back(Object());
}

或者在 C++11 中:

void add() {
vec.emplace_back();
}

如果你真的需要指针,更喜欢智能指针。

关于c++ - 类在另一个类中初始化,它如何生存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884641/

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