c++ - 构造函数返回值中的异常

标签 c++ exception constructor smart-pointers raii

假设我有一个类充当“智能指针”并在销毁时释放某种系统资源。

class Resource{
protected:
     ResourceHandle h;
public:
     Resource(ResourceHandle handle)
     :h(handle){
     }

     ~Resource(){
         if (h)
             releaseResourceHandle(h);//external function, probably from OS
     }
};

我有一些函数返回用于“资源”初始化的值:

ResourceHandle allocateHandle();

现在,如果我在我的代码中这样做:

Resource resource(allocateHandle());

AND allocateHandle() 抛出异常,究竟会发生什么?崩溃会发生在构建 Resource() 期间还是构建之前?

常识告诉我,因为在 allocateHandle 返回之前抛出异常,执行甚至不会进入 Resource() 构造函数,但我对此不是很确定。这是一个正确的假设吗?

最佳答案

参数在任何函数调用之前被求值——在本例中是构造函数——。 因此,在构造函数调用之前抛出异常

关于c++ - 构造函数返回值中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329628/

相关文章:

C++:使用 Google Mock 和 Code::Blocks、MinGW 和 C++11 进行单元测试

C++ 模板 : template argument error

javascript - prototype.constructor 和内置 Object() 有什么区别

c++ - 调用构造函数时出错

php - 特征是否可以具有具有私有(private)和 protected 可见性的属性和方法?特征可以有构造函数、析构函数和类常量吗?

C++,矩阵运算,运算符问题

c++ - 这个按位表达式有什么作用?

android - SQLiteException - 仅在某些设备上发生

exception - Installshield:EnumServicesStatus 抛出异常问题

使用 NUnit 进行调试