每当我将一个对象压入堆栈时,它都将其称为析构函数。我认为这是因为它正在制造一个tempobject,将其推出,然后销毁tempObject。
enum State{Empty, Main, Menu};
class StateInfo{
public:
StateInfo(State state);
~StateInfo();
StateInfo(const StateInfo& otherState);
StateInfo& operator=(const StateInfo& otherState);
private:
std::string _stateType;
State _state;
};
析构函数仅输出一条消息,说明_stateType被破坏。
复制和=函数仅将_stateType和_state =设置为otherState。
当我制作一个堆栈并将其推入对象时:
std::stack<StateInfo> _stateStack;
_stateStack.emplace(StateInfo(State::Main));
我收到一条消息,说明析构函数已被调用。
最佳答案
您应该将语句替换为:
_stateStack.emplace(State::Main);
然后会在将
State::Main
传递到其构造函数的位置创建对象。您显式创建了临时StateInfo
强制复制或移动ctor调用(和析构函数)。关于c++ - 即使遵循以下三个规则,也可以堆栈调用析构函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37620717/