假设我需要一个包装其他对象的优先级队列的类(意味着队列是该类的成员),并且还为它提供了一些额外的功能。
我不太确定定义该向量的最佳方法是什么,主要是如何实例化它。
目前我在头文件中有类似的内容:
// 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的回答删除了电话。
答案 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;`