在C ++中将队列实例化为类成员

时间:2009-01-31 13:01:35

标签: c++ oop

假设我需要一个包装其他对象的优先级队列的类(意味着队列是该类的成员),并且还为它提供了一些额外的功能。

我不太确定定义该向量的最佳方法是什么,主要是如何实例化它。

目前我在头文件中有类似的内容:

// in SomeClass.h:
class SomeClass
{
    public:
        SomeClass(); // constructor
            // other methods
    private:
        std::priority_queue<OtherClass> queue;
};

虽然源文件是这样的:

// in SomeClass.cpp
SomeClass::SomeClass():
    queue() // removed the constructor, no need to explicitly call it
    {}

// other methods

<小时/> 编辑:根据Ray的回答删除了电话。

3 个答案:

答案 0 :(得分:3)

只需写下:

SomeClass::SomeClass():
    queue() { }

C ++知道从那里自动调用构造函数而没有参数。

答案 1 :(得分:2)

您的成员是一个实例,但您正在尝试使用指向新分配的实例的指针初始化该实例。将初始化保留为空(如Ray所指出的)或将其完全保留在构造函数的初始化列表之外。

SomeClass::SomeClass() {}

具有与

相同的队列
SomeClass::SomeClass() : queue() {}

如果你真的想使用new在堆上分配它,那么你的成员需要在标题中声明为:

private:
            std::priority_queue<OtherClass>* queue;

但我建议不要这样做,除非你打算让其他类稍后接管同一队列实例的所有权,并且不希望SomeClass的析构函数释放它。

答案 2 :(得分:0)

建立在Michel的例子上,如果你真的想要在堆上分配pq,你最好用

`boost::smart_ptr<std::priority_queue<OtherClass> > queue;`

或作为最后的手段,如果您无权使用提升

`std::auto_ptr<std::priority_queue<OtherClass> > queue;`