我有一個情況,其中i有一個指針到一個STL矢量實例化新的STL矢量
所以像
vector<MyType*>* myvector;
我必須設置在構造該指針爲NULL,然後延遲加載時財產被觸動。
我怎樣才能實例化這一個向量的新實例?
我有一個情況,其中i有一個指針到一個STL矢量實例化新的STL矢量
所以像
vector<MyType*>* myvector;
我必須設置在構造該指針爲NULL,然後延遲加載時財產被觸動。
我怎樣才能實例化這一個向量的新實例?
我必須設置這個指針爲NULL的構造函數,然後懶當財產被觸摸時加載。
我怎樣才能實例化這個向量的新實例?
我不知道我理解你的所有道路。爲什麼不簡單地將矢量留空,並設置一個布爾值來表示該屬性是否已加載?另外,您也可以使用boost::optional
boost::optional< vector<MyType*> >
或者
boost::optional< vector< shared_ptr<MyType> > >
然後,您可以簡單地通過取消引用可選對象接收對象,和矢量分配給它像往常一樣。
我不會使用這個指針。這件事複雜,你要想想,當你複製包含的屬性的對象會發生什麼,...
如果你真的要使用一個指針,你可以做這樣的
struct A {
A():prop() { }
~A() { delete prop; }
vector< MyType *>& get() {
if(!prop) prop = new vector< MyType* >();
return prop;
}
private:
// disable copy and assignment.
A(A const&);
A& operator=(A const&);
vector< MyType* > *prop;
};
或使用shared_ptr
,這將是我的程序中的方式(但boost :: optional仍然是第一個選項,之後將是vector-and-boolean選項,之後將爲以下內容)
struct A {
typedef vector< shared_ptr<MyType> > vector_type;
vector_type &get() {
if(!prop) {
prop.reset(new vector_type);
}
return *prop;
}
private:
// disable copy and assignment.
A(A const&);
A& operator=(A const&);
shared_ptr<vector_type> prop;
};
複製和分配被禁用,因爲他們ld分享場景背後的道具(淺層副本),這些道具應清晰地記錄或通過在這些功能中進行深層複製來禁用。
myvector = new std::vector<yourtype>;
那麼要初始化它,您至少需要將它設置爲NULL或使用該語法的下面的實例。你也應該按照字段聲明的順序來做,否則可能會發生奇怪的事情。
// Field.
std::vector<int> *myvector;
// Constructor.
myclass() : myvector(new std::vector<int>)
{
}
假設你定義矢量正確:
vector<int>* myvector; // Note vector must be parametrized with a type.
// There is no such thing as a a naked vector.
初始化爲NULL
myclass::myclass()
:myvector(NULL) // You can use 0 here but I still like NULL because it
{} // gives me more information. Waiting for the new keyword.
實例化在第一次使用:
myvectr = new vector<int>(100); // reserve some space as appropriate
但你不應該有RAW指針你班上的成員(除非有很好的理由)。您將需要編寫自己的拷貝構造函數和賦值運算符。
或者,您也可以用智能指針包裹'myvector'。或者更好地使它成爲一個正常的矢量。沒有必要將它作爲指針。因爲向量是一個模板類,並且必須有一個類型
vector* myvector;
:
你不能haved這樣的指針。你可以說:
vector <int> * myvector = 0;
或:
vector <string> * myvector = 0;
,然後動態地創建矢量:
myvector = new vector <string>;
這是我多一點C++'ish將myvector設置爲0而不是NULL。 – 2009-06-09 14:54:38