|
发表于 2023-5-16 16:35:49
|
显示全部楼层
本楼为最佳答案
这取决于你的具体需求和使用情况。
如果你的对象的生命周期是固定的,并且在编译时已知(例如,你知道你只需要10个 Animal 对象,并且它们在函数或作用域结束时可以被销毁),那么在栈上创建对象并将地址赋给指针数组可能是更好的选择。这样做的好处是,你不需要手动管理内存(如使用 new 和 delete)。
这是一个例子:
- Animal cat[10]; // 在栈上创建10个 Animal 对象
- Animal* animals[10];
- for (int i = 0; i < 10; i++) {
- animals[i] = &cat[i]; // 将地址赋给指针数组
- }
复制代码
但是,如果你的对象的数量或生命周期在运行时可能会变化(例如,你可能在运行时决定需要更多的 Animal 对象,或者你可能需要在多个函数或作用域之间共享这些对象),那么在堆上动态分配内存可能是更好的选择。这样做的好处是,你可以更灵活地管理你的对象的生命周期和数量,但是缺点是你需要手动管理内存,确保在适当的时候使用 delete 来释放内存,防止内存泄漏。
这是一个例子:
- Animal* animals[10];
- for (int i = 0; i < 10; i++) {
- animals[i] = new Animal(); // 在堆上创建 Animal 对象并将地址赋给指针数组
- }
- // 使用这些 Animal 对象...
- for (int i = 0; i < 10; i++) {
- delete animals[i]; // 当你不再需要这些 Animal 对象时,记得释放内存
- }
复制代码
总的来说,选择在栈上创建对象还是在堆上动态分配内存,取决于你的特定需求和约束。 |
|