【发布时间】:2019-07-12 10:31:17
【问题描述】:
我正在尝试实现一个具有动态长度的自制矢量类。这个想法是使用指针和动态分配的空间,如下所示。
template<class T>
class myVector
{
int size;
T* array;
public:
myVector(int n): size(n), array(new T[n]){}
~myVector(){delete[] array;}
T pop();
...
}
如果我需要推送,我会创建一个新对象,其中包含一个指向新分配空间的新指针并复制整个内容。现在我卡在 pop 部分,因为我不知道如何在调用 pop() 后释放未使用的空间。
像这样在pop()中使用delete可以吗
T pop()
{
T = *(array+size-1);
delete array+size-1;
return T;
}
但是如果我这样做,那么当调用析构函数时,弹出的位置会被删除两次,我认为这可能会出错。而且我知道我可以等到整个数组为空后再删除,但可能会发生一个非常大的数组首先分配并在程序运行时弹出很多,如果我可能会导致大量未使用的空间不要在中间释放它们。
我的问题:
(1) 如果我在 pop() 中写 delete 会发生什么?
(2) 我能做什么? (最好只有删除)
【问题讨论】:
-
(1) 在我的机器上,它会终止正在运行的应用程序。 (2) 永远不要使用
new/delete,永远不要使用new[]/delete[]。请改用std::vector、std::make_unique或std::make_shared。
标签: c++ memory-management dynamic-programming delete-operator