gpt4 book ai didi

c++ - 如何实现在构造函数中使用自身的对象的析构函数

转载 作者:行者123 更新时间:2023-11-30 05:09:21 26 4
gpt4 key购买 nike

我正在尝试用 C++ 制作 Thompson 的构造算法(我对这种语言有点陌生)。但是我在为我的类(class)实现析构函数时遇到了一些困难 NFiniteAutomaton .在 NFiniteAutomaton 的构造函数的某些部分我有:

NFiniteAutomaton() = default;
NFiniteAutomaton(std::string regex){
// A lot of code here
// ....
NFiniteAutomaton single_ele;
single_ele.init_state = new State;
single_ele.final_state = new State;
// A lot of code here
// ....
}

然后在我代码的其他部分,我创建指向 single_ele.init_state 的指针的和single_ele.final_state主要内容NFiniteAutomaton ,因为我想重用状态而不是创建具有相同属性的新状态。结构 State看起来像这样:

struct State;
struct Transition {
State* to;
std::string symbol;
};

struct State{
std::vector<Transition> transitions;
};

所以当我实现 NFiniteAutomaton 的析构函数时删除堆上分配的所有结构,我的问题就产生了,因为当single_ele超出范围,它会删除所有 State指针包括其他自动​​机正在使用的指针(因为析构函数被调用)。我想到的一个解决方案是制作一个方法 Clear()随时删除所有指针,并保留默认析构函数。有没有办法只使用原始指针来实现此类的析构函数?

最佳答案

One solution that I thought is to make a method Clear() that deletes all pointers whenever I want, and leave the default destructor.

可能,但为什么要创建一个类的用户应该知道的新函数,而不是让析构函数负责取消分配动态内存?我不会那样做。

您应该将指针设置为 nullptr ,在调用 NFiniteAutomaton 的析构函数之前。在析构函数中使用 delete 初始化和最终状态。

关于c++ - 如何实现在构造函数中使用自身的对象的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249854/

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