最近我提出了以下问题:
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();从工厂收集价值的合法和被接受的方式吗?
我在这里看到的唯一问题是,如果a变量离开作用域。这里有什么东西我遗漏了吗?
发布于 2015-07-20 13:46:21
Base &a = *factory();您取消了unique_ptr的引用,并保留了对其切入点的引用。
但是你没有存储unique_ptr本身。
因此,它死在语句的末尾,带着它的切入点,而您的引用现在正在悬空。
https://stackoverflow.com/questions/31517957
复制相似问题