定位操作符new()的理解

來源:互聯網
上載者:User

class Screen {
public:
void *operator new( size_t );
void *operator new( size_t, Screen* );
// ...
};
額外的參數可以被new 運算式中指定的定位實參初始化例如
void func( Screen *start ) {
Screen *ps = new (start) Screen;
// ...
}

“new (start) Screen;”
這是定位new操作

Screen *ps = new (start) Screen;
表示在已經開闢好的記憶體區start中為堆對象Screen申請一個記憶體

也就是說,如果start佔100個位元組
你現在從它的第1個位元組開始,往裡面寫入Screen

這樣做今後要釋放記憶體的時候有麻煩,如果Screen裡面有指標,並開闢了空間,那麼delete ps會調用解構函式,而start中的那塊記憶體也丟失了,因為ps也指向了start.所以要避免這種情況,就要先ps->~Screen( )這樣顯示的調用Screen的解構函式,再delete [ ]start
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.