簡體   English   中英

自定義矢量pop_back函數

[英]Custom Vector pop_back function

所以我正在嘗試為我的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 ++庫容器,則使用適當的分配器函數。 然后,容器將根據需要在內存中構造和破壞對象。 銷毀的內存中的實際表示可能仍然不會真正改變,因為大多數析構函數只是擺脫了所持有的任何資源,而使對象中的位保持不變,因此看起來好像內存中存在一個生命對象,盡管事實並非如此。

數組的最后一個元素將在array[vsize - 1]

除非使用新放置的表達式創建對象,否則不應調用該對象的析構函數。 相反,您應該做的是減小大小並保持實際對象不變。 除非它具有動態存儲持續時間,否則將調用delete / delete[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM