C++中,類Class數組長度的問題

來源:互聯網
上載者:User

看如下代碼:

class OperatorNewCls{private://enum {sz=10};int arr[sz];public:/*定義解構函式後,sizeof(OperatorNewCls)的值未改變,**但是new OperatorNewCls[size]的值等於(sizeof(OperatorNewCls)*size+4),**因為在new OperatorNewCls[size][-1]未知存放了數組的長度size。****若不定義解構函式,**則new OperatorNewCls[size]的值等於sizeof(OperatorNewCls)*size*/~OperatorNewCls(){}//該函數必須是public的,且必須是static,儘管可以不顯示指定staticvoid * operator new[](size_t size){cout<<"operator[],size="<<size<<endl;return malloc(size);}};void test43(){int size=25;cout<<"sizeof(OperatorNewCls)="<<sizeof(OperatorNewCls)<<endl;int *arr=(int*)new OperatorNewCls[size];for(int i=-1;i<size;++i){cout<<"arr["<<i<<"]="<<arr[i]<<"\t"<<endl;}}

執行結果如下:

注釋掉OperatorNewCls的解構函式~OperatorNewCls()後,執行結果如下:

差別在於OperatorNewCls數組arr的長度:定義解構函式後,長度為1004bytes,arr[-1]為數組元素個數25;注釋解構函式後,長度為1000bytes,arr[-1]為隨機數。

為什麼定義解構函式後,需要儲存數組長度?

可能是因為定義解構函式後,意味著使用者需要自己控制“堆記憶體”的釋放,因此需要“對數組裡的每個對象,逐個調用解構函式”,所以需要儲存數組元素個數。

而不定義解構函式時,意味著使用者不會自己控制釋放“堆記憶體”,所以就沒必要逐個調用解構函式了,所以就沒必要儲存數組元素個數了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.