在C++中实现工厂方法的首选方法是什么?

Grz*_*nio 12 c++ memory-management factory

一个新手问题:我有一个带有一些虚函数的类的层次结构,我正在尝试实现一个工厂方法,但我不确定什么是最好的方法:

  1. 从工厂方法返回一个原始指针,并将其包装到调用方法中的智能指针中
  2. 从工厂返回一个智能指针
  3. 从工厂返回一个正确的对象(但它是否正确复制派生类?)并将其分配给调用方法中的本地对象
  4. 从工厂返回一个引用(但是如何在没有内存泄漏的情况下在工厂方法中创建对象?)

我将非常感谢工厂方法和最小客户端的示例,它有效并且不会泄漏内存.

我的背景是C#和Java,所以我在C++ atm中的内存管理方面有点迷失.

Kon*_*lph 8

选项3和4从一开始就不存在,因为它们根本不起作用:3个切片对象,4个创建内存泄漏或无效引用.

从另外两种方法来看,我强烈赞成2:返回一个智能指针.事实上,如果可能的话,努力完全避免原始指针.不幸的是,C++使得这个问题变得很多(这不是一个微不足道的反对意见!任何曾经用C++编写面向对象代码并且使用智能指针的人分享我的痛苦) - 但另一种选择更加痛苦.

当然,也有替代5:使用原始指针和一个垃圾收集器.