[英]new() and delete() as operators in C++?
將new()和delete()用作c ++中的運算符的用途是什么?原因是什么? 使它成為運算符而不是函數的優點是什么?
new
運算符不能是函數,因為它接受類型作為參數。 您不能將new foo_type
編寫為函數調用,因為foo_type
不是產生值的表達式,而是類型名稱。
delete
運算符可以是針對不同指針類型重載的函數,以及用於delete []
語義的額外可選bool
參數。 為什么要有delete
運算符,可能與它的new
運算符是對稱的。
也就是說,模板函數可以將類型作為模板參數。 但是new
和delete
運算符歷來在模板之前。
另外,可以編寫一個函數,該函數采用一個類型的原型實例(而不是類型)來構造對象: newobj(m_class(constructor_arg))
。 對於不同類型,此newobj
重載。 它分配空間,將構造復制到其中,然后返回對象。
因此,最終,設計反映了設計師的品味和異想天開。
在語言設計中,操作符和函數(以及語句,聲明等)之間的分隔本身並不是嚴格必須的。
我知道人們優先考慮它們有兩個普遍的原因。
1)使用new / delete跟蹤對象池。 New會從池中獲取第一個未使用的資源,Delete將其返回到池中。 如果您經常分配/取消分配對象,這將很有用。
2)跟蹤內存使用情況。 您可以跟蹤泄漏或內存覆蓋問題。 例如,您可以在任一側填充內存,或者跟蹤誰在分配內存,以便跟蹤誰沒有取消分配內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.