假设我有 Foo
类:
struct Resource {
void block();
void unblock();
};
struct Foo {
static Foo create() {
Resource resource;
resource.block();
return Foo{resource};
}
~Foo() { resource.unblock(); }
void f() {}
private:
Resource resource;
Foo(Resource resource): resource(resource) {}
};
我说得对吗,不能保证 ~Foo
只会在这样的 block 中被调用一次?
{
Foo foo = Foo::create();
foo.f();
}
如果不能保证,如果使用 c++11 和移动语义是否有可能以某种方式修复?例如不在移动的 foo 中调用 unblock_resource
,但我不确定是否保证使用移动构造函数/operator= 从 Foo::create
返回?
最佳答案
复制省略对您没有帮助,因为它是一种优化,可能应用也可能不应用。
移动语义确实有帮助,您可以在局部变量的函数返回中得到有保证的移动。但这意味着您必须编写移动构造函数,并且您必须修改析构函数以便它不会解锁从中移动的对象的资源。
关于c++ - RAII 和工厂设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47723473/