我正在进行仿真,它需要创建多个相当相似的模型。我的想法是拥有一个名为Model的类,并使用静态工厂方法来构建模型。例如; 模型:: createTriangle 模型:: createFromFile 。我从以前的Java代码中汲取了这个想法,并正在寻找在C++中实现此想法的方法。

到目前为止,这是我想到的:

#include <iostream>

class Object {
    int id;

public:
    void print() { std::cout << id << std::endl; }

    static Object &createWithID(int id) {
        Object *obj = new Object();

        obj->id = id;

        return *obj;
    }
};

int main() {
    Object obj = Object::createWithID(3);

    obj.print();

    return 0;
}

有关此的一些问题:
  • 这是一种公认​​的干净方法吗?
  • 返回的引用是否始终确保正确删除对象?
  • 有没有指针的方法吗?
  • 最佳答案

    您的代码当前包含内存泄漏:使用new创建的任何对象都必须使用delete清除。 createWithID方法最好完全不使用new并看起来像这样:

    static Object createWithID(int id)
    {
        Object obj;
        obj.id = id;
        return obj;
    }
    

    这似乎需要该对象的附加副本,但实际上return value optimization通常会导致该副本被优化。

    关于c++ - C++静态工厂构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23844964/

    10-10 13:25