2009-01-31 31 views
0

假设我需要一个包装其他对象的优先级队列(意味着队列是该类的成员)的类,并且还给它一些额外的功能。将队列实例化为C++中的类成员

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

目前我有在头文件是这样的:

// 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 


编辑:删除通话,每雷的回答。

+0

忘记我最后的编辑 - 这很好。谢谢您的帮助。 – 2009-01-31 13:25:26

回答

3

只要写:

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

C++明知不带参数自动从那里调用构造函数。

2

您的成员是一个实例,但您所做的是试图用指向新分配的实例的指针初始化该实例。要么保持初始化为空(正如Ray指出的那样),要么完全不在构造函数的初始化列表中。

SomeClass::SomeClass() {} 

具有相同的队列初始化为

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

如果你真的想用新的,那么你的成员需要在标题中被宣布为它分配在堆上:

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

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

0

大厦米歇尔的例子,如果你真的想上堆上分配PQ你将与

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

或者作为最后的手段更好,如果你没有获得提振

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