在堆或堆栈上分配对象

时间:2014-03-14 19:30:36

标签: c++

我有一辆两级车和一个人。汽车有一个人类型的指针。 然后有这个功能

void f() {
vector<Car> v;
v.push_back(Car("ABC123", new Person("Johan")));
v.push_back(Car("XYZ789", new Person("Bo")));
v.push_back(Car("DEF456", new Person("Anna")));
copy(v.begin(), v.end(), ostream_iterator<Car>(cout, "\n"));
}

F有内存泄漏。 如果我想不想为堆上的obj分配内存,我应该用一个p变量替换指向汽车中的人吗?

将在f()中进行以下调用,

v.push_back(Car("ABC123", Person("Johan")));

还是F还会有问题吗?

1 个答案:

答案 0 :(得分:1)

这实际上取决于你想做什么。对于您的测试代码是,您可以将Person值复制到(正确更改的)汽车类中。

但是你似乎在对象之间有关系,就像在数据库中一样。那么,你的前卫后期的人是否有房子,结婚等?那么每个人应该只有一个实例,你需要引用或指向它们。但是那时你会在f()之外“创造”那些人,也许在床上()。 ; - )