我正在寫一個智能指針作爲我的作業,而且我遇到了一個問題。需要我的智能指針和原始指針之間的轉換,所以操作符重載到我的智能指針類是這樣實現的:如何使此運算符調用明確?
operator T*() {
return raw_pointer;
}
另一個要求是實現==操作符,它應該聰明之間工作指針之間以及智能指針和原始指針之間。 我已經實現了它這樣的,這超載,也可以在我的智能指針類發現:
bool operator== (const smart_pointer<T> &smart_pointer) {
return raw_pointer == smart_pointer.raw_pointer;
}
現在,當我嘗試做這樣的事情:
smart_pointer<obj> sp = new obj();
obj *p = new obj();
if(sp == p) {
// do something
else {
// do something else
}
我得到以下錯誤信息:
ambiguous overload for 'operator=='
candidates are:
operator==(obj*, obj*) <built-in>
bool smart_pointer<T>::operator==(const smart_pointer<T>&) [with T = obj]
我猜它不知道它是否應使用內置的一個,我的智能指針轉換爲原始指針,還是應該用我的方法是超載ŧ他==運算符。事情是我目前想不出什麼來解決這種情況。提前致謝!
如果這個智能指針是關於所有權的(因爲大多數智能指針都是),那麼你不希望與原始指針進行比較來銷燬指向該對象的原始指針,對嗎?我想用這個提示你可以弄清楚兩個建議中哪一個是相當不合適的。 ;-) –
@ Cheersandhth.-Alf:好點。 – Jarod42