gpt4 book ai didi

c++ - 这个工厂模式实现有什么问题吗

转载 作者:行者123 更新时间:2023-11-30 02:37:33 29 4
gpt4 key购买 nike

最近我问了以下问题:

Best method to implement an abstract factory pattern

我 future 的研究表明你可以像这样实现工厂:

#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(); 是从工厂“收集”值(value)的合法且广为接受的方式吗?

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

最佳答案

Base &a = *factory();

您取消引用了 unique_ptr 并保留了对其指针的引用。
但是您没有存储 unique_ptr 本身。
因此它会在语句结束时终止,并带走它的指针,并且您的引用现在是悬空的。

关于c++ - 这个工厂模式实现有什么问题吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517957/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com