gpt4 book ai didi

c++ - 使用 "throwing"构造函数避免堆分配

转载 作者:太空狗 更新时间:2023-10-29 23:52:13 24 4
gpt4 key购买 nike

假设我有一些 Foo 类,它没有定义默认构造函数和 throws 非默认构造函数。在初始化该类型的新对象时,我想捕获任何异常并返回,否则继续使用该对象。我注意到很难(如果可能的话)在堆栈上 或通过使用共享指针来初始化此对象,因为我试图避免管理内存。

失败 1

Foo f; // doesn't work, no default constructor
try { f = Foo(...); }

失败 2

try {
Foo f(...)
}
catch(...) {}
// doesn't work, f is inaccessible

失败 3

boost::shared_ptr<Foo> pf;
try { pf = new Foo(...); } // no assignment operator

我必须...

Foo *f;
try { f = new Foo(...) } // okay, let's just manage the memory

有办法吗?

编辑

好的,所以这有效,尽管不是最干净的。有没有更“标准”的方式?

boost::shared_ptr<Foo> pf;
try { pf = boost::shared_ptr<Foo>(new Foo(...)); }

最佳答案

智能指针有一个reset方法:

boost::shared_ptr<Foo> f;
//...
f.reset(new Foo(...));

这解决了您的“失败#3”并允许您做您想做的事。

关于c++ - 使用 "throwing"构造函数避免堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860775/

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