首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个工厂模式实现有什么问题吗?

这个工厂模式实现有什么问题吗?
EN

Stack Overflow用户
提问于 2015-07-20 13:35:55
回答 1查看 49关注 0票数 1

最近我提出了以下问题:

Best method to implement an abstract factory pattern

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

代码语言:javascript
复制
#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变量离开作用域。这里有什么东西我遗漏了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-20 13:46:21

代码语言:javascript
复制
Base &a = *factory();

您取消了unique_ptr的引用,并保留了对其切入点的引用。

但是你没有存储unique_ptr本身。

因此,它死在语句的末尾,带着它的切入点,而您的引用现在正在悬空。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31517957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档