【发布时间】:2014-07-13 17:48:44
【问题描述】:
我正在进行模拟,它需要创建多个相当相似的模型。我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型。例如; Model::createTriangle 或 Model::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;
}
关于这个的一些问题:
- 这是一种可接受且干净的制作对象的方式吗?
- 返回的引用是否始终确保正确移除对象?
- 没有指针有没有办法做到这一点?
【问题讨论】:
-
既然您来自 Java,请注意这一点:在 C++ 中,如果您使用指针,那么您做错了,如果您使用
new,那么您正在做错了。 -
指针可以,但绝对不能拥有资源(非常低级别的组件之外)。
-
@Mankarse:首先近似 :-) 更完整的规则是“没有裸露的公共指针”。我认为 KNR 更喜欢说“指针不能拥有资源”,但这使得解释链表或树节点如何工作变得有点困难。
-
@KerrekSB:嗯,谁是“KNR”?
标签: c++ constructor factory