【发布时间】:2016-04-07 12:18:26
【问题描述】:
我有一个指向对象指针数组的指针,并且需要调整数组的大小。我确实意识到这是使用向量的最佳时机,但我不允许这样做。我的代码有效,但我没有完全按照我写的内容进行操作,并且担心我可能会造成内存泄漏:
void foo (DataSet &add_data)
{
if (sets == NULL)
{
sets = new DataSet*[1];
sets[0] = &add_data;
}
else
{
DataSet **transfer;
transfer = new DataSet*[num_of_sets];
for (int i = 0; i < num_of_sets; i++) // Copy addresses?
transfer[i] = sets[i];
delete [] sets; // Free the array.
sets = new DataSet*[num_of_sets + 1]; // Create new sets
for (int i = 0; i < num_of_sets; i++) // Copy back
sets[i] = transfer[i];
sets[num_of_sets] = &add_data; // Add the new set
delete [] transfer;
transfer = NULL;
}
num_of_sets++;
}
Visual Studio 为什么会抛出异常:
for (int i = 0; i < num_of_sets; i++) // Copy addresses?
*transfer[i] = *sets[i];
但不是:
for (int i = 0; i < num_of_sets; i++) // Copy addresses?
transfer[i] = sets[i];
但是这两个代码段在 linux 中编译和运行都没有错误。此代码应复制指向对象的指针。是这样的吗:
for (int i = 0; i < num_of_sets; i++) // Copy addresses?
transfer[i] = sets[i];
如果我想稍后使用删除功能释放这些对象,我是否需要担心?
【问题讨论】:
-
std::vector<std::unique_ptr<DataSet>>. -
我不能使用矢量...我知道 :(
-
为什么现在没有人使用矢量了?
-
@JameyD,通常这是一项误导性任务的一部分,旨在通过禁止使用标准库来教授一个“真正的”c++。
-
@StoryTeller 而不是 C99。对于一直使用原始指针而不是智能指针的每个人以及一直在教授使用原始指针的教师也是如此。
标签: c++ arrays pointers object