gpt4 book ai didi

c++ - 自动存储和异常中没有无参数构造函数的类的对象

转载 作者:行者123 更新时间:2023-11-30 01:34:53 25 4
gpt4 key购买 nike

我有一个返回类类型对象的工厂方法。

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* 但我需要面对 newdelete.

有没有办法在没有 new 和创建临时实例但有异常处理的情况下做到这一点?

最佳答案

您可以使用 std::optional (自 C++17 起)。

(强调我的)

The class template std::optional manages an optional contained value, ...

If an optional<T> contains a value, the value is guaranteed to be allocated as part of the optional object footprint, i.e. no dynamic memory allocation ever takes place. Thus, an optional object models an object, not a pointer, even though operator*() and operator->() are defined.

例如

std::optional<MyClass> obj;
try {
obj = factory(...);
} catch (...) {
cout << "oops..." << endl;
}

顺便说一句:如果你只是不想处理 newdelete手动,smart pointers也是不错的选择。

关于c++ - 自动存储和异常中没有无参数构造函数的类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com