我創建了一個名爲p_pointer
的指針類,並創建了一個向量來保存p_pointer
類型。但是,當我嘗試使用push_back
函數時,它不起作用。我試圖直接使用double*
而不是p_pointer (double)
,而push_back
函數確實可以這樣工作。所以我的猜測是我的拷貝構造函數有問題?無法將指針推回到向量中
template<class T>
class p_pointer{
private:
T* cp;
size_t* refptr;
public:
//default constructor
p_pointer() : cp(0), refptr(new size_t(1)){}
//copy constructor
p_pointer (p_pointer&s) : cp(s.cp), refptr(s.refptr){
*++refptr;
}
//assignment operator
p_pointer& operator=(const p_pointer& s){
++*s.refptr;
//freeing the left hand size if it is the last one
if(--*refptr == 0){
delete cp;
delete refptr;
}
cp = s.cp;
refptr = s.refptr;
}
//other assignment operator
p_pointer& operator=(T* s){
if(--*refptr == 0){
delete cp;
delete refptr;
}
cp = s;
refptr = new size_t(1);
}
};
int main()
{
p_pointer<double> temp;
temp = new double(1);
std::vector<p_pointer<double> > collection;
collection.push_back(temp); //error at here
}
我們應該猜測錯誤信息嗎? –
不應該'p_pointer(p_pointer&s)'是'p_pointer(const p_pointer&s)'? – PeterT