gpt4 book ai didi

c++ - 动态分配 stdlib 堆栈?

转载 作者:行者123 更新时间:2023-11-30 00:39:00 28 4
gpt4 key购买 nike

我正在尝试在我创建的类中使用 stdlib 堆栈,但我在动态创建它时遇到问题。

这是我的头文件“matcher.h”中的相关代码:

    private:

stack<char> opens;

这是我正在创建的仅分配堆栈的构造函数:

#include "matcher.h"
using namespace std;
//Creates a matcher object with the default values.
matcher::matcher()
{
opens = new stack<char>;
}

我得到的错误如下:

matcher.cpp:19:17: error: no match for ‘operator=’ in ‘((matcher*)this)->matcher::opens = ((*(const std::deque<char, std::allocator<char> >*)(& std::deque<char, std::allocator<char> >())), (operator new(40u), (<statement>, ((std::stack<char>*)<anonymous>))))’

这告诉我 std::stack 不包含赋值运算符,这引出了我的问题:

如果匹配器对象不包含赋值运算符,我应该使用什么方法来获取将在我的匹配器对象中持久存在的堆栈?

感谢您的宝贵时间。

最佳答案

opens 是类中的一个对象,因此不需要用 new 分配。

如果您希望它是默认构造的,那么它会自动发生——您不需要编写任何代码来做到这一点。如果所有类成员都可以默认构造,那么您根本不需要为该类编写默认构造函数。

如果你有一个不能(或不应该)被默认构造的成员,那么你在构造函数的初始化列表中这样做,例如:

class matcher {
public:
matcher() :
number(42) // initialise with a value
{} // nothing else to do - "opens" is automatically initialised

private:
stack<char> opens;
int number;
};

仅当您确实需要动态分配的对象时才使用new,并确保在您完成使用后将其删除——最好使用RAII。 ,因为通常很难以任何其他方式正确处理。如果您希望它与另一个对象的生命周期相关联,那么只需将它作为成员放入该类中,而不必为动态分配而烦恼。

关于c++ - 动态分配 stdlib 堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503820/

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