05異常的型別 返回物件時需要注意的問題

2021-10-08 15:09:15 字數 1014 閱讀 4324

1 異常的型別2 返回匿名物件時,catch捕獲時的淺拷貝問題解決

由於返回的是匿名物件,只是簡單的賦值後,catch的e=myexceptin()淺拷貝後,匿名物件就會呼叫析構釋放掉error;而當e執行完catch的語句後,也觸發一次析構函式,這樣就重複析構error,容易報錯,所以返回物件時,我們都要重寫拷貝構造和等號運算子過載。

3 **例子

#define _crt_secure_no_warnings

#include

using

namespace std;

class

myexception

// 以後物件的異常都要 重寫拷貝構造 和 =號運算子過載

myexception

(const myexception &other)

myexception&

operator=(

const myexception &other)if(

this

->error !=

null

)this

->error =

newchar

[strlen

(other.error)+1

];strcpy

(this

->error, other.error)

;return

*this;}

// 處理該類的異常方法

void

handleerror()

myexception()

}private

:char

*error;};

void

fun(

)void

test01()

catch

(myexception e)

}int

main()

Item 21 需要返回物件時,不要返回引用

乙個典型的場景如下 class rational friend const rational operator const rational lhs,const rational rhs rational a,b rational c a b 注意operator 返回的是 rational 例項,...

關於返回可選型別的異常丟擲函式

大家知道,在可選鏈 optional chain 裡,返回可選型別的可選鏈返回的仍是可選型別。但是要注意的是,在異常處理裡,對於返回型別是可選型別 optional 的異常丟擲函式,其返回型別是可選的可選型別。非常繞口是不是,對啦 就是這樣 2333333333。簡單來說,對於下面這個異常丟擲函式 ...

C 關於函式返回物件型別的說明

1.返回const物件的引用 返回引用不會呼叫複製建構函式,效率更高 引用指向的物件應在呼叫函式執行時存在,不能是函式中的區域性變數 當引數都為const,函式返回其一的時候,必須也為const 2.非const物件的引用 兩種常見情況 過載賦值運算子 使其可以連續賦值 s1 s2 s3 過載 使其...