Item 52 new delete成對兒出現

2021-05-25 15:26:43 字數 814 閱讀 1379

● 通用概念

widget *pw = new widget;

其實分為兩步:

1> 呼叫operator new分配記憶體

2> 呼叫ctor初始化物件

如果第2步丟擲異常,系統會自動呼叫

1> void operator delete(void *mem) throw();

2> void widget::operator delete(void *mem, std::size_t size) throw();

二者之一來**記憶體。

系統查詢和new對應的delete時是一一對應。如果對於乙個placement new沒有給出placement delete,則無法**記憶體。

所以,自定義new/delete時要保持一一對應:

此時若出現異常,系統會自動找到帶ostream的delete。

● stl中有乙個placement new:

void* operator new(std::size_t, void *pmemory) throw();

該函式用於vector在內部給新物件尋找儲存位置。placement new因此而得名。placement是名詞「安置、尋找合適位置」的意思。

現在一般意義上,只要帶有多餘引數的new都叫placement new。系統在匹配placement new和placement delete時,也是靠比較那些多餘的引數而完成的。

● item 33講了類在派生的時候,如果重名就會發生定義遮擋的問題:

先要了解c++預定義的new:

這些都是你要在你的類裡重定義的。

簡單做法如下:

歷屆試題52 小數第n位

我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。在上面的約定下,求整數除法小數點後的第n位開始的3位數。一行三個整數 a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置 0一行3位數字,表示 a除以b,小數...

leetcode 52 N皇后II(回溯)

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回 n 皇后不同的解決方案的數量。示例 輸入 4 輸出 2 解釋 4 皇后問題存在如下兩個不同的解法。q.解法 1 q q.q.q.解法 2 q.q q...

leetcode演算法練習 52 N皇后 II

所有題目源 git位址 題目n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回 n 皇后不同的解決方案的數量。示例 輸入 4輸出 2解釋 4 皇后問題存在如下兩個不同的解法。q.解法 1 q q.q....