簡體   English   中英

new()和delete()作為C ++中的運算符?

[英]new() and delete() as operators in C++?

將new()和delete()用作c ++中的運算符的用途是什么?原因是什么? 使它成為運算符而不是函數的優點是什么?

new運算符不能是函數,因為它接受類型作為參數。 您不能將new foo_type編寫為函數調用,因為foo_type不是產生值的表達式,而是類型名稱。

delete運算符可以是針對不同指針類型重載的函數,以及用於delete []語義的額外可選bool參數。 為什么要有delete運算符,可能與它的new運算符是對稱的。

也就是說,模板函數可以將類型作為模板參數。 但是newdelete運算符歷來在模板之前。

另外,可以編寫一個函數,該函數采用一個類型的原型實例(而不是類型)來構造對象: newobj(m_class(constructor_arg)) 對於不同類型,此newobj重載。 它分配空間,將構造復制到其中,然后返回對象。

因此,最終,設計反映了設計師的品味和異想天開。

在語言設計中,操作符和函數(以及語句,聲明等)之間的分隔本身並不是嚴格必須的。

我知道人們優先考慮它們有兩個普遍的原因。

1)使用new / delete跟蹤對象池。 New會從池中獲取第一個未使用的資源,Delete將其返回到池中。 如果您經常分配/取消分配對象,這將很有用。

2)跟蹤內存使用情況。 您可以跟蹤泄漏或內存覆蓋問題。 例如,您可以在任一側填充內存,或者跟蹤誰在分配內存,以便跟蹤誰沒有取消分配內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM