簡體   English   中英

構造函數中拋出的異常

[英]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.

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