簡體   English   中英

存儲基類指針的C ++向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM