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