2014-10-07 68 views
-1

我讀了關於C++動態內存分配。這裏是我的代碼:什麼動態內存用於?(C++)

#include <iostream> 
using namespace std; 
int main() 
{ 
    int t; 
    cin>>t; 
    int a[t]; 
    return 0; 
} 

是什麼上面和下面的區別:

int* a=new(nothrow) int[t]; 
+3

你的代碼不合法​​C++(變長數組或VLA,不允許),所以差異並不重要。 – juanchopanza 2014-10-07 05:23:52

回答

2

使用動態分配:

  • 當你需要時創建和銷燬的對象比控制;或
  • 當您需要創建一個本地對象,這個對象太大而無法冒險放入堆棧;或
  • 當本地數組的大小不是一個常數

爲了回答您的具體問題:int a[t];是無效的C++,因爲數組的大小必須是恆定的。一些編譯器允許這樣的可變長度數組作爲擴展,從C中借用;但你不應該使用它們,除非你不介意被綁定到該編譯器。

所以你想要動態分配在那裏,無論是簡單的方式,通過RAII管理:

std::vector<int> a(t); 
// use it, let it clean itself up when it goes out of scope 

或困難的方式,通過雜耍指針管理,希望你不要把它們:

int* a=new int[t]; 
// use it, hope nothing throws an exception or otherwise leaves the scope 
delete [] a; // don't forget to delete it 
+0

thx男人真的。因爲在我的電腦裏它可以很好地編譯,就像那個.bad代碼呵呵....? :) – ricardo 2014-10-13 11:44:09

0

你的第一個例子是C99兼容數組分配,在堆棧上發生,其壽命是相似的到其他局部變量。

該分配示例是一個典型的C++動態內存分配,它發生在堆上,並且其生存期延長至達到delete a[] - 沒有此代碼,內存被「泄漏」。生命週期中發生的變量被delete破壞,並且可能在當前本地作用域結束後發生。