gpt4 book ai didi

c++ - 填充指针数组,退出时删除

转载 作者:行者123 更新时间:2023-11-30 04:33:03 26 4
gpt4 key购买 nike

在 C++ 中,假设我正在创建一个指针数组,每个元素都应该指向一个数据类型 MyType。我想在函数 fillArPtr(MyType *arPtr[]) 中填充这个数组。还可以说我可以使用函数 createObject(int x) 创建 MyType 对象。它的工作方式如下:

MyType *arptr[10]; // Before there was a mistake, it was written: "int *arptr[10]"
void fillArPtr(MyType *arptr[])
{
for (int i = 0; i < 10; i++)
{
MyType myObject = createObject(i);
arptr[i] = new MyType(myobject);
}
}

这是最好的方法吗?在这个程序中,我应该如何使用 delete 删除由“new”创建的对象(或者我应该使用 delete 吗?)

最佳答案

既然您问的是“什么是最好的方法”,那么让我在这里大胆地提出一个更像 C++ 的替代方案。由于您的 createObject 已经按值返回对象,因此以下应该有效:

#include <vector>

std::vector<MyType> fillArray()
{
std::vector<MyType> res;
for (size_t i = 0; i != 10; ++i)
res.push_back(createObject(i));
return res;
}

现在您根本不需要进行任何内存管理,因为分配和清理由 vector 类完成。像这样使用它:

std::vector<MyType> myArr = fillArray();
someOtherFunction(myArr[2]); // etc.
someLegacyFunction(&myArr[4]); // suppose it's "void someLegacyFunction(MyType*)"

尽管如此,如果您确实需要手动内存管理和指针,请务必说明,但最好提供一个用法示例。

关于c++ - 填充指针数组,退出时删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7204913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com