C++ 在自动存储和异常中没有无参数构造函数的类的对象
我有一个工厂方法,它返回类类型的对象C++ 在自动存储和异常中没有无参数构造函数的类的对象,c++,exception,c++17,C++,Exception,C++17,我有一个工厂方法,它返回类类型的对象 MyClass factory(string param1, ...) { ... MyClass instance(param1); ... if (smth) throw ...; ... return instance; } 工厂方法可能会抛出错误 我正在尝试创建具有异常处理的此类对象。大概是这样的: MyClass obj; try { obj = factory(...); } catch (...) { co
MyClass factory(string param1, ...) {
...
MyClass instance(param1);
...
if (smth) throw ...;
...
return instance;
}
工厂方法可能会抛出错误
我正在尝试创建具有异常处理的此类对象。大概是这样的:
MyClass obj;
try {
obj = factory(...);
} catch (...) {
cout << "oops..." << endl;
}
当然,问题是,这在MyClass obj创建实例时不起作用,但我希望避免创建实例,因为这会耗费时间和资源
也许我可以将factory的返回类型更改为MyClass*,但是我需要面对new和delete
有没有一种方法可以在不新建和创建临时实例的情况下执行此操作,但可以进行异常处理?如何:
try {
MyClass obj = factory(...);
DoJob(obj);
} catch (...) {
cout << "oops..." << endl;
}
那么:
try {
MyClass obj = factory(...);
DoJob(obj);
} catch (...) {
cout << "oops..." << endl;
}
您可以从C++17开始使用
重点矿山
类模板std::optional管理包含的可选
价值
如果可选项包含值,则该值保证为
作为可选对象示意图的一部分分配,即无动态
内存分配从未发生过。因此,可选对象为
对象,而不是指针,即使运算符*和运算符->是
定义
e、 g
顺便说一句:如果你只是不想手动处理新建和删除,这也是一个不错的选择。你可以从C++17开始使用
重点矿山
类模板std::optional管理包含的可选
价值
如果可选项包含值,则该值保证为
作为可选对象示意图的一部分分配,即无动态
内存分配从未发生过。因此,可选对象为
对象,而不是指针,即使运算符*和运算符->是
定义
e、 g
顺便说一句:如果你只是不想手动处理新建和删除,这也是一个不错的选择。非常感谢。可选的看起来和我需要的完全一样。似乎std::可选工厂。。。这是有道理的。或者std::变体工厂…非常感谢。可选的看起来和我需要的完全一样。似乎std::可选工厂。。。这是有道理的。或者std::变体工厂…谢谢。我想分开关注点-我不希望DoJob出现异常,所以希望它出厂时出现异常。谢谢。我想分离关注点-我不希望DoJob出现异常,所以希望它出现出厂异常。