<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    c++: 獲取delete[]中的數組大小

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    看一個小例子:

    1 #include <iostream> 2   3 using namespace std; 4   5 class A { 6 public: 7     A() { cout << "A::A()" << endl; } 8     ~A() { cout << "A::~A()" << endl; } 9 }; 10   11 int main() { 12     A* a = new A[5]; 13     delete[] a; 14   15     return 0; 16 }

    編譯執行輸出:

    A::A()
    A::A()
    A::A()
    A::A()
    A::A()
    A::~A()
    A::~A()
    A::~A()
    A::~A()
    A::~A()
    

    上面的輸出顯示程序正確釋放了5個A對象。
    現在的問題是:我們在delete[] a語句中并沒有給出對象數組的大小,那么系統是如何做到正確釋放對象個數的呢?

    接著看下面的程序段:

    1 #include <iostream> 2   3 using namespace std; 4   5 class A { 6 public: 7     A() { cout << "A::A()" << endl; } 8     ~A() { cout << "A::~A()" << endl; } 9 }; 10   11 int main() { 12     A* a = new A[5]; 13   14     int addr = (int)a - 4; 15     cout << "delete[] size = " << *(int*)addr << endl; 16   17     delete[] a; 18   19     return 0; 20 }

    編譯執行:

    A::A()
    A::A()
    A::A()
    A::A()
    A::A()
    delete[] size = 5
    A::~A()
    A::~A()
    A::~A()
    A::~A()
    A::~A()
    

    結論:
    系統在new一個數組對象的時候會把數組大小存放在返回的內存地址的前4個字節中。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全