我試圖在當前項目中使用boost::ptr_vector
,並想知道是否可以在push_back()方法中使用參數化構造函數,或者如果我需要使用默認構造函數?boost :: ptr_vector構造函數
作爲第二個問題,如果我定義它,它仍然會使用默認構造函數嗎?
這可能不是最好的跟進,但大部分我所用boost::ptr_vector
看到的實現表明push_back()
方法將new
操作。是否可以創建一個對象,然後將該對象的指針指向容器的push_back()
方法?
我試圖在當前項目中使用boost::ptr_vector
,並想知道是否可以在push_back()方法中使用參數化構造函數,或者如果我需要使用默認構造函數?boost :: ptr_vector構造函數
作爲第二個問題,如果我定義它,它仍然會使用默認構造函數嗎?
這可能不是最好的跟進,但大部分我所用boost::ptr_vector
看到的實現表明push_back()
方法將new
操作。是否可以創建一個對象,然後將該對象的指針指向容器的push_back()
方法?
爲了使用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);
}
它似乎是它嘗試使用存儲在對象的指針的信息在陣列中放置。在這種情況下,可以給出一個靜態對象。雖然這給了我一個奇怪的感覺,當我考慮給出一個靜態對象由於某種原因(沿指針容器的行應該只用於唯一的項目/指針)。
ptr_vector期望管理的生命週期它包含的對象,就像常規矢量一樣。 (ptr_vectors的要點是存儲指針,但提供了保存實際對象的向量的語義)。因此,存儲指向靜態對象的指針並不是一個好主意。 – 2012-04-25 11:07:53
@davidschwartz進行了測試:試圖將一個適當類型的'static'對象放置到'ptr_vector'中,並且沒有引用或取消引用的組合可以執行操作。結論:試圖將「靜態」對象放入「ptr_vector」是非法的,可能還有任何「ptr_container」 – gardian06 2012-04-25 15:49:11