每当我将一个对象压入堆栈时,它都将其称为析构函数。我认为这是因为它正在制造一个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/

10-09 05:44