2012-04-25 84 views
0

我試圖在當前項目中使用boost::ptr_vector,並想知道是否可以在push_back()方法中使用參數化構造函數,或者如果我需要使用默認構造函數?boost :: ptr_vector構造函數

作爲第二個問題,如果我定義它,它仍然會使用默認構造函數嗎?


這可能不是最好的跟進,但大部分我所用boost::ptr_vector看到的實現表明push_back()方法將new操作。是否可以創建一個對象,然後將該對象的指針指向容器的push_back()方法?

回答

2

爲了使用ptr_vector或任何ptr_container很像標準載體或容器。只要構造函數已定義,使用任何所需的構造函數都是合法的(默認值也可以)。唯一真正的區別是一個ptr_container需要一個指針而不是一個靜態對象,並且支持作爲淺拷貝的深層副本的克隆。

關於後續。有可能使用現有的物體插入push_back()方法,它是:

#include <boost/ptr_container/ptr_vector.hpp> 
#include <vector> 
typedef boost::ptr_vector<Base> thing; 
void foo(void){ 
    thing Bar; 
    Object * newObj = new Object(param1, param2); 
    bar.push_back(newObj); 
} 

它似乎是它嘗試使用存儲在對象的指針的信息在陣列中放置。在這種情況下,可以給出一個靜態對象。雖然這給了我一個奇怪的感覺,當我考慮給出一個靜態對象由於某種原因(沿指針容器的行應該只用於唯一的項目/指針)。

+0

ptr_vector期望管理的生命週期它包含的對象,就像常規矢量一樣。 (ptr_vectors的要點是存儲指針,但提供了保存實際對象的向量的語義)。因此,存儲指向靜態對象的指針並不是一個好主意。 – 2012-04-25 11:07:53

+0

@davidschwartz進行了測試:試圖將一個適當類型的'static'對象放置到'ptr_vector'中,並且沒有引用或取消引用的組合可以執行操作。結論:試圖將「靜態」對象放入「ptr_vector」是非法的,可能還有任何「ptr_container」 – gardian06 2012-04-25 15:49:11

相關問題