【发布时间】:2013-03-24 19:53:00
【问题描述】:
上下文
我正在尝试实现我的std::vector 模板类版本。向量包含模板参数T的动态数组:
_vec = new T[n];
显然T 可以是任何类型,指针、类、原始类型。当对大小为6 的向量调用v.resize(4) 时,它显然应该删除this specification 之后的动态数组的最后两个元素(不重新分配数组):
如果 n 小于当前容器大小,则内容将减少到它的前 n 个元素,删除超出的那些(并销毁它们)。
破坏我的意思是,我认为 std 库的意思是,调用对象的析构函数或简单地释放内存空间,如果它是包括指针在内的任何其他原始类型。
问题:是否可以(如果可以,如何)销毁动态分配的数组中的模板元素而不解除分配和重新分配?
我尝试了什么?好吧,我真的不知道从哪里开始:
- 显然you shouldn't 在原始类型上调用
delete。
-
You can 显式调用对象上的析构函数,但如果
T不是对象,这将不起作用。 - 我想只是减少内部
_size计数器(以便将来的push_back元素将被覆盖),但这不会立即调用对象的析构函数。
【问题讨论】: