每当我将一个对象推入我的堆栈时,它就会调用它的析构函数。我假设这是因为它正在制作一个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已被销毁。 copy和=函数只是将_stateType和_state =设置为otherState。
当我制作一个堆栈并将其推入并对象时:
std::stack<StateInfo> _stateStack;
_stateStack.emplace(StateInfo(State::Main));
我收到一条消息,说已经调用了析构函数。
答案 0 :(得分:7)
您应该将您的陈述替换为:
_stateStack.emplace(State::Main);
然后将创建对象,将State::Main
传递给它的构造函数。您明确创建了临时StateInfo
强制复制或移动ctor调用(和析构函数)。
答案 1 :(得分:4)
您应该将State
的构造函数的参数直接传递给emplace()
:
_stateStack.emplace(State::Main);