这个工厂模式实现有什么问题吗
Is there any issues with this factory pattern implementation
最近我问了以下问题:
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();
从工厂获取 "collect" 价值的合法且广为接受的方式吗?
我在这里看到的唯一问题是 a
变量是否离开范围。我在这里遗漏了什么吗?
Base &a = *factory();
您取消引用了 unique_ptr
并保留了对其指针的引用。
但是您没有存储 unique_ptr
本身。
因此它在语句的末尾死去,带走它的指针,你的引用现在是悬空的。
最近我问了以下问题:
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();
从工厂获取 "collect" 价值的合法且广为接受的方式吗?
我在这里看到的唯一问题是 a
变量是否离开范围。我在这里遗漏了什么吗?
Base &a = *factory();
您取消引用了 unique_ptr
并保留了对其指针的引用。
但是您没有存储 unique_ptr
本身。
因此它在语句的末尾死去,带走它的指针,你的引用现在是悬空的。