4 回答
TA貢獻1780條經驗 獲得超5個贊
new當您希望某個對象一直存在直到您將delete其保留時,應使用它。如果不使用new,則超出范圍時該對象將被銷毀。例如:
void foo()
{
Point p = Point(0,0);
} // p is now destroyed.
for (...)
{
Point p = Point(0,0);
} // p is destroyed after each loop
有人會說使用new決定您的對象是在堆上還是在堆棧上,但這僅適用于在函數內聲明的變量。
在下面的示例中,“ p”的位置將是其包含對象Foo的分配位置。我更喜歡稱這種“就地”分配。
class Foo
{
Point p;
}; // p will be automatically destroyed when foo is.
使用來分配(和釋放)對象new要比就地分配對象昂貴得多,因此應將其使用限制在必要的地方。
何時分配via的第二個示例new是數組。您無法*在運行時更改就地數組或堆棧數組的大小,因此在需要大小不確定的數組時,必須通過new分配它。
例如
void foo(int size)
{
Point* pointArray = new Point[size];
...
delete [] pointArray;
}
(*先發制人的挑剔-是的,有些擴展允許大小可變的堆棧分配)。
TA貢獻1802條經驗 獲得超10個贊
看一下這個問題和這個問題,以獲取有關C ++對象實例化的一些好答案。
這個基本思想是,需要手動清理在堆上實例化的對象(使用new),而超出范圍時,將自動清理在堆棧上實例化的對象(沒有new)。
void SomeFunc()
{
Point p1 = Point(0,0);
} // p1 is automatically freed
void SomeFunc2()
{
Point *p1 = new Point(0,0);
delete p1; // p1 is leaked unless it gets deleted
}
TA貢獻1829條經驗 獲得超6個贊
如果要在堆而不是堆棧上創建對象,則應使用new。這允許通過指針從當前函數或過程之外訪問對象。
在C ++中查找指針和內存管理可能對您很有用,因為您不太可能在其他語言中遇到這些問題。
TA貢獻1871條經驗 獲得超8個贊
總是使用New來分配動態內存,然后必須釋放它。
通過執行第一個選項,當范圍丟失時,該內存將自動釋放。
Point p1 = Point(0,0); //This is if you want to be safe and don't want to keep the memory outside this function.
Point* p2 = new Point(0, 0); //This must be freed manually. with...
delete p2;
- 4 回答
- 0 關注
- 517 瀏覽
添加回答
舉報
