在堆或堆栈上分配对象

Allocate object on heap or stack

本文关键字:分配 对象 堆栈      更新时间:2023-10-16

我有两类车和人。Car有一个person类型的指针。然后是这个函数

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分配内存,我应该用person p变量替换指向person in car的指针吗?

能否在f()中调用

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

还是F还会有问题?

这取决于你想做什么。对于您的测试代码,可以将Person值复制到(经过适当更改的)汽车类中。

但是你似乎在对象之间有关系,就像在数据库中一样。那么,在你的发展后期,一个人会有房子,结婚等等吗?然后每个个体应该只有一个实例,您需要引用或指向它们。但是你会在f()之外的任何地方"创造"这些人,也许在床上()。: -)