- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 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/
我是一名优秀的程序员,十分优秀!