[英]C++ vector storing base class pointers
好的,情況:我使用的是一個我無法控制的庫,它有一個方法createSomeObject()。 這個方法返回一個指向具有純虛函數的抽象基類的指針,它沒有復制構造函數,所以我不能自己實例化它,也不能復制它(顯然)。
我需要在向量中存儲一些數字(比如說10個),所以我嘗試執行以下操作:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v.push_back(library->createSomeObject());
}
一旦這個循環結束,向量就會被破碎的指針填充。
我嘗試過以下方法:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
AbstractBaseClass* abc = library->createSomeObject();
v.push_back(abc);
}
無濟於事。 我必須瘋狂或在這里做一些嚴重的錯誤。 我環顧四周,但答案總是使用boost :: shared_ptr。 可能是一個很好的解決方案,但是我不能保證它將會在這些將被構建的機器上,所以我想避免使用代碼包裝Boost。
有什么我想念的嗎? 我覺得好像忘記一些簡單的事情,因為我無法想到其中一個不起作用的原因。
當你這樣做:
vector<AbstractBaseClass*> v(10);
你已經在創建一個包含10個(NULL)指針的向量。 因此,在你調用push_back
,你將擁有一個包含20個指針的向量,其中前10個指針無效。
如果您事先知道尺寸:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v[i] = library->createSomeObject();
}
或者,可選地,在創建空向量之后調用reserve
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.