哪个更好的做法?

jma*_*erx 4 c++ vector

假设我有一个FOO类.

我想要一个std::vectorFOO.

如果我做这样的事情会更好:

FOO foo;
foo.init();
foo.prop = 1;
std::vector<FOO> myvec;

myvec.push_back(foo);
foo.prop = 2;
myvect.push_back(foo);
Run Code Online (Sandbox Code Playgroud)

或者更好的做法是:

std::vector<FOO> myvec;
FOO foo;
myvec.push_back(foo);
myvec.back().init();
myvec.back().prop = 1;

myvec.push_back(foo);
myvec.back().init();
myvec.back().prop = 2;
Run Code Online (Sandbox Code Playgroud)

我基本上不确定是否更好地制作模型并推入模型而不是制作实例,推送它,然后从矢量中修改它.另外,哪一个更安全,最不可能导致内存泄漏?

谢谢

小智 10

最佳实践是没有init()函数 - 你想要一个构造函数.如果您总是需要设置prop,请为构造函数指定一个参数.这与向量没有任何关系 - 它是应该编写所有C++代码的方式.


CB *_*ley 8

在处理值时,这两种方法都没有任何内存问题,也没有手动动态分配任何对象.

我倾向于给出FOO一个构造函数,它可以执行任何init操作并设置prop为适当的值.然后你可以推送你想要的值:

myvec.push_back(FOO(1));
myvec.push_back(FOO(2));
Run Code Online (Sandbox Code Playgroud)