c 裡 如果throw的是指標,catch的時候用delete嗎

時間 2021-06-03 06:31:17

1樓:

從C++17開始,一般來說throw和catch都應該用例項值方式,不需要catch引用,更不提倡指標。這是因為從C++17開始,throw和catch遵從Copy elision

因此:Throw by value, catch by value.

2樓:邱昊宇

和沒有用 throw...catch 時候的原則沒啥兩樣,理論上應該 delete 掉,但不 delete 也不會有人來懲罰你,頂多是洩漏了乙個物件嘛。(滑稽)

不過,throw 指標是有缺陷的:

涉及到額外的記憶體分配,也有失敗拋異常的可能;

是其它異常裡的異類,必須特殊對待,要寫對非常麻煩。

所以,C++ 的異常一般都推薦是

Throw by value, catch by reference.

之所以 catch 引用,是因為 catch 的時候如果沒有特別需求,一般都是統一 catch 基類或者用基類保底:

trycatch

(MyException

const&e

)catch

(std

::exception

const&e

)如果不 catch 引用而 catch 物件,會有 Object Slicing 的問題。

The variable declared by the exception-declaration, of type cv T or cv T&, is initialized from the exception object, of type E, as follows:

— if T is a base class of E, the variable is copy-initialized from the corresponding base class subobject of the exception object;

— otherwise, the variable is copy-initialized from the exception object.

p.s. 如果你是用 MFC 之類的奇怪框架,到底該幹什麼還是看文件吧,入鄉隨俗。

C語言的指標是 ptr還是ptr?

舒默語 其實 並不是和 ptr 連在一起的,你可以寫 int ptr,左右兩邊的空格都是可以隨意的,所以 ptr 是指標,它儲存的值是乙個記憶體位址,但是 ptr 這個變數是指標變數,至於 就是取拿個記憶體位址裡的值。最重要的作用其實是和前面的 int 串在一起的,它表明了ptr這個位址上儲存的變數...

c 指標的定義為什麼是這樣?

int a 100,p a 或者其實是在問為什麼不自動推導p的型別?那也是可以的 auto a 100 auto p a 如果沒理解錯樓主的意思的話,樓主是感覺號就應該表達同乙個意思。但實際上不是,號在變數宣告裡表示指標,在指標變數前面表示取指標所指向的值。類似的情況在C 裡還有很多。你p不需要定義...

為什麼說指標是 C 語言的精髓?

悽臨雨 指標 型別 虛擬記憶體位址值 整數 指標運算 根據型別確定的寬度對位址值進行修改。其中c語言裡的型別,比c 裡的型別的功能弱的多,所以你覺得c的精髓是指標,在c 裡就是個基礎操作,沒什麼大不了的。因為c語言的語言功能太貧瘠,所以只能靠記憶體位址的修改來做事,沒它就寸步難行。 Howard J...