[英]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.