考慮以下代碼運算符在下面的代碼中的重載如何工作?
// Example program
#include <iostream>
#include <string>
class SmartPtr{
int *ptr;
public:
explicit SmartPtr(int *ptr=0){
ptr = new int;
}
~SmartPtr(){
std::cout<<"Dest is called"<<std::endl;}
int& operator *() //overloaded operator for dereferencing
{
std::cout<<"(*) is called .."<<std::endl;
return *ptr;
}
int * operator ->() //overloaded operator for referencing
{
std::cout<<"(*) is called .."<<std::endl;
return ptr;
}
};
int main()
{
SmartPtr p(new int());
*p = 20; //overloaded operator * called
std::cout<<*p<<std::endl; // Overloaded operator * called
// End of program
//Destructor called
}
這裏我重載運算符*和&,我想知道爲什麼基於我以前在主函數中提到的意見該類型的函數簽名的。 如果有人可以解釋它是如何工作的?
PS:我是新來的C++和交代我問是微不足道{我知道:)}
「這裏我重載了運算符*和&」 - 等待,*你重載了這些運算符,但不知道你編寫的代碼是如何工作的? – WhozCraig
它的複製代碼@WhozCraig我想通過一種方式來理解這段代碼我自己可以實現這樣的事情 –
顯然與你的問題無關然後,這個代碼最大的問題可能是缺少實際初始化或分配, 'ptr',成員變量,在該構造函數中。在構造函數中'ptr = ...'正在修改參數自動變量; * member *'ptr'保持默認初始化(以確定值)。當完成後,'main'中的'p.ptr'不確定,並且'new int'都被泄漏,因此在你用'operator *'解引用時嘗試存儲一個值,並調用*未定義的行爲* 。 – WhozCraig