簡體   English   中英

指針向量

[英]A vector of pointers

我試圖從文件中讀取數據,從數據中創建評論者,然后創建指向每個評論者的指針向量。 在我閱讀了第一個評論家的數據並將其設置為“批評”之后,

NightHawks *nightHawkPtr = &theCritic; 
criticPointer.push_back(nightHawkPtr);

然后我嘗試將它們打印出來。

 for (int i = 0; i < criticPointer.size(); i++)
    {
        criticPointer[i]->text();
    }

但是,每次將指針向后推時,所有指針都指向同一評論家。

從您的代碼看來,您正在將所有指針值設置為一個實例,而只是不斷更改該實例。 每當值更改時,您都必須創建新實例:

NightHawks *nhp = new Critic();

如果要將它們插入向量中,強烈建議使用shared_ptrs,這樣就不必擔心釋放內存。

它們指向同一評論者,因為您為他們分配了相同變量theCritic的地址

NightHawks *nightHawkPtr = &theCritic; 
criticPointer.push_back(nightHawkPtr);

此外,如果變量theCritic是局部變量,則程序可能具有未定義的行為,因為指向變量的指針在局部變量將被銷毀后變為無效。

每次構建類型為注釋器的對象時,都應在堆中構建它,即應使用運算符new

將其放置在向量中時,需要創建一個新的注釋器。 否則所有數據都指向相同的存儲位置。

criticPointer.push_back(new NightHawks(theCritic));

更好的是,不存儲指針,而只是將評論者值存儲在向量中。

正如您在評論中提到的那樣, I declare the critic like this NightHawks theCritic; and then i use getLine to read the input from the file and then I use setters to set the input to theCritic I declare the critic like this NightHawks theCritic; and then i use getLine to read the input from the file and then I use setters to set the input to theCritic ,您的問題是您正在更改同一變量的內容。 為不同的評論者創建新變量,分配給他們,然后將地址放入向量中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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