gpt4 book ai didi

c++ - 自定义 Vector pop_back 函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:44:20 25 4
gpt4 key购买 nike

所以我正在尝试为我的 Vector 类实现一个 pop_back() 函数,但我没有得到预期的结果:

这是我当前的功能:

template <typename T>
void Vector<T>::pop_back() {
if(vsize > 0){
array[vsize].~T();
--vsize;
}
}

为什么这不删除数组中的最后一个元素?

这是我的.h:

template <typename T>
class Vector {

public:

Vector();
~Vector();
void push_back(const T &e);
int size() const;
void pop_back();
void allocate_new();
T operator[](int index);

private:

Vector(const Vector<T> & v);
Vector<T> & operator=(const Vector<T> &);
int vsize;
int capacity;
T* array;

};

最佳答案

调用数组中对象的析构函数除了将数组元素置于一个有趣的状态之外不会对数组做任何事情。特别是,如果做这样的事情:

T* array = new T[2];
array[1].~T();
delete[] array; // ERROR: double destruction

如果不首先恢复被破坏的数组元素,您根本无法真正摆脱数组。

“真实”实现处理这种情况的方式是分配原始内存,例如,使用 void* memory = operator new[](size); (带有套装 size )或者,如果它是标准 C++ 库容器,则使用适当的分配器函数。然后容器根据需要在内存中构造和销毁对象。被销毁的内存中的实际表示可能仍然没有真正改变,因为大多数析构函数只是摆脱了所有持有的资源并保留对象中的其他位不变,看起来好像内存中有一个生命对象,尽管它不是。

关于c++ - 自定义 Vector pop_back 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084284/

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