这个工厂模式实现是否有任何问题

时间:2015-07-20 13:35:56

标签: c++ c++11 factory

最近我问了以下问题:

Best method to implement an abstract factory pattern

我未来的研究表明,您可以像这样实施工厂:

#include <stdio.h>

#include <memory>

class Base{
    char x[20000];
};

class Child : public Base{
public:
    Child(int a, int b){

    }
};

std::unique_ptr<Base> factory(){
    return std::unique_ptr<Base> { new Child(5, 6) };
}

int main(){
    Base & a = *factory();

    return 0;
}

这会在没有警告的情况下进行编译,并且不会造成任何内存泄漏,即使std::unique_ptr被立即解除引用。

这是Base & a = *factory();合法且被广泛接受的方式来收集&#34;来自工厂的价值?

我在这里看到的唯一问题是,如果a变量离开范围。我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:3)

Base &a = *factory();

您取消引用unique_ptr并保留对其引用的引用 但是你没有存储unique_ptr本身 因此,它在声明结束时就会死掉,并引用它,你的引用现在正悬空。