gpt4 book ai didi

c++ - 堆栈调用析构函数,即使遵循三规则

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:31 25 4
gpt4 key购买 nike

每次我将一个对象压入堆栈时,它都会调用它的析构函数。我假设这是因为它正在创建一个临时对象,推送它,然后销毁该临时对象。

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));

我收到一条消息说析构函数已被调用。

最佳答案

您应该将您的声明替换为:

_stateStack.emplace(State::Main);

然后对象将被创建,将 State::Main 传递给它的构造函数。您显式创建了临时 StateInfo 强制复制或移动 ctor 调用(和析构函数)。

关于c++ - 堆栈调用析构函数,即使遵循三规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620717/

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