2009-01-31 75 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;`