gpt4 book ai didi

c++ - RAII 和工厂设计模式?

转载 作者:太空狗 更新时间:2023-10-29 20:02:01 27 4
gpt4 key购买 nike

假设我有 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/

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