小编Vos*_*ler的帖子

C++静态工厂方法vs构造函数:如何避免复制?

这个问题要求在C++中实现静态工厂方法的简洁方法,这个答案描述了一种明确的方法.返回值优化将使我们免于制作不必要的副本Object,从而使这种方式创建Object与直接调用构造函数一样高效.复制iid私有构造函数内部的开销可以忽略不计,因为它很小int.

但是,当Object包含一个实例变量Foo(它需要复杂的初始化逻辑)而不是一个小的基本类型时,问题和答案不会涵盖更复杂的情况.假设我想Foo使用传递给的参数构造Object.使用构造函数的解决方案看起来像:

class Object {
    Foo foo;

public:
    Object(const FooArg& fooArg) {
        // Create foo using fooArg here
        foo = ...
    }
}
Run Code Online (Sandbox Code Playgroud)

使用类似于引用答案的静态工厂方法的替代方案将是,因为在我看来:

class Object {
    Foo foo;

    explicit Object(const Foo& foo_):
        foo(foo_)
    {

    }

public:
    static Object FromFooArg(const FooArg& fooArg) {
        // Create foo using fooArg here
        Foo foo = ...
        return Object(foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里,复制foo_ …

c++ oop

13
推荐指数
2
解决办法
1597
查看次数

标签 统计

c++ ×1

oop ×1