簡體   English   中英

數組和指針

[英]Arrays & Pointers

尋找一些有關數組和指針的幫助以及我要做什么的解釋。 我想在Foo *類型的堆上創建一個新數組,以便以后可以將在其他位置創建的對象分配給該數組。 當執行以下操作時,我很難理解自己正在創建的內容。

Foo *(*f) = new Foo*[10];

同樣,一旦創建了數組,我將如何訪問每個元素。

(f + 9)->fooMember(); ??????

提前致謝。

Foo *(*f) = new Foo*[10];

聲明中的括號是不必要的,因此與以下內容相同:

Foo **f = new Foo*[10];

無論如何, new Foo*[10]為十個Foo*分配空間,並使它們保持未初始化狀態。 它返回一個指向數組(第零個元素)中初始Foo*的指針,並將其分配給f

要訪問數組的元素,只需使用下標即可:

f[0] = new Foo;
f[0]->fooMember();

請記住,使用new[]創建的所有內容必須在完成后通過調用指針的delete[]釋放一次。 例如:

delete[] f;

不會刪除被指向的元素Foo*在數組英寸 如果使用new創建Foo對象,則必須先delete它們, 然后再刪除數組。 例如,要釋放我們上面創建的元素:

delete f[0];

您可以使用以下代碼創建一個指針數組:

Foo** f = new Foo*[10];

然后使用以下命令訪問元素:

f[9]->fooMember();

之后一定要清理:

delete[] f;

謝謝。

在這種情況下,您可能會發現以下代碼段很有用:

首先初始化:

Foo** f = new Foo*[10];
for (int i = 0; i < 10; i++) {
    f[i] = new Foo;
}

然后訪問您要求的f數組中的每個元素,但是您將無法執行此操作,除非您通過如上所述調用構造函數為每個成員正確分配內存:

f[9]->fooMember();

最后,為了使事情整潔並防止內存泄漏:

for (int i = 0; i < 10; i++) {
    delete f[i];
}
delete[] f;

數組和指針不是C ++的。 怎么樣

std::vector<std::shared_ptr<Foo> > f;
f.push_back(std::make_shared<Foo>(whatever, arguments, you, need));
// ...
f[9]->fooMember();
// ...

無需手動清理:-)

暫無
暫無

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

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