c++ - 自定义 Vector pop_back 函数

标签 c++ vector

所以我正在尝试为我的 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/

相关文章:

c++ - 为什么代码打印最后一个 std::cout?

c++ - Totalview获取QString的值

c++ - 使用 boost::asio 的 UDP 客户端和服务器设计

c++ - 通过与不同类型的值进行自定义比较来查找 std::set 的元素

c++ - 使用 std::map::at 时出错

c++ vector 不在嵌套for循环中更新

c++ - 对象 vector 的初始化

c++ - 在 vector 中添加相邻字符

c++ - 安卓工作室 + NDK : C++ Editor does not work

c++ - 设置 vector 等于{};