[英]Exception thrown in a Constructor
我試圖了解構造函數拋出異常時會出現什么問題。
例如,這段代碼的一部分:
#include <iostream>
class X
{
public:
X(int);
~X();
private:
int* m;
};
X::X(int y)
{
m = new int(y);
throw std::exception();
}
X::~X()
{
delete m;
std::cout << "Destructor" << std::endl;
}
//---------------------------------------
int main()
{
try
{
X a(4);
}
catch (const std::exception&)
{
std::cout << "ex" << std::endl;
}
system("pause");
// output
/* ex
Press any key to continue . . .
*/
}
沒有調用析構函數,所以它是 memory 泄漏!
1)是否可以在不使用任何智能指針的情況下解決這個問題?
2)我的主要問題是當構造函數拋出異常時會出現什么問題(例如,當我們有一個層次結構的類,或者可能拋出異常的 class 成員時)?
我的主要問題是構造函數拋出異常時會出現什么問題
就像一般的拋出一樣,構造函數沒有什么特別的。
C++ 設計用於在構造函數中拋出。
你的例子:
m = new int(y);
throw std::exception();
哪里都不好。
利用:
auto m = std::make_unique<int>(y);
throw std::exception();
反而。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.