gpt4 book ai didi

c++ - 更改删除顺序以删除变量之前的指针

转载 作者:行者123 更新时间:2023-12-03 06:53:44 25 4
gpt4 key购买 nike

我有一个带有普通变量 _apple 的类,一个指向第二个变量的指针 _orange,以及一个清理 _orange 的析构函数>.

尽管 _orange 在我的类中 _apple 之前定义,但它作为显式定义的析构函数的一部分被清理,因此 apple 之前删除,与通常的“后进先出”删除顺序相反。

在我的代码中,这是一个问题,因为我的“apple”需要“orange”仍然存在,而“orange”必须是一个指针,因为它是虚拟的和动态的。

有没有办法改变删除顺序(没有任何额外开销)?

MWE:

#include <iostream>

struct Food
{
std::string _name;
Food(const std::string& name) : _name(name) {}
~Food() { std::cout << _name << std::endl; }
};

struct Meal
{
Food* _orange;
Food _apple;
Meal() : _orange(new Food("orange")), _apple("apple") { }
~Meal() { delete _orange; }
};

int main()
{
{ Meal meal; }
return 0;
}
orange
apple

最佳答案

您可以通过更改管理资源(= 分配的内存)的人来更改删除顺序。如果您需要指针语义,std::unique_ptr 是一个很好的选择:

struct Meal
{
std::unique_ptr<Food> _orange;
Food _apple;
Meal() : _orange(std::make_unique<Food>("orange")), _apple("apple") {}
};

关于c++ - 更改删除顺序以删除变量之前的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63792526/

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