最近我问了以下问题:
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
变量离开范围。我在这里缺少什么吗?
答案 0 :(得分:3)
Base &a = *factory();
您取消引用unique_ptr
并保留对其引用的引用
但是你没有存储unique_ptr
本身
因此,它在声明结束时就会死掉,并引用它,你的引用现在正悬空。