我已經從運算符T *()返回指針對象類型,並通過智能指針調用刪除操作符,並嘗試調用成員函數,並且我沒有任何運行時錯誤。這怎麼可能?或者我的理解是錯誤的?請建議。刪除智能指針,但仍可以訪問指針?
#include <iostream>
using namespace std;
template <typename T>
class sPtr
{
private:
T * pointee__;
public:
operator T *() {
cout <<"Inside T*() "<<endl;
return pointee__;
};
explicit sPtr (T * t)
{
pointee__ = t;
};
T * operator->() {
return pointee__;
}
};
class JTest
{
private:
int x;
public:
JTest (int l=100) { x=l; };
void display();
};
void JTest::display()
{
cout <<"Display API x is "<<x<<endl;
}
void JFunc (JTest * tmp)
{
cout <<" JFunc"<<endl;
tmp->display();
cout <<"Invoking JTest -> display "<<endl;
}
int main (int argc, char ** argv)
{
sPtr <JTest> t(new JTest);
t->display();
delete t; // Invokes operator T*() , and it is dangerous!!!..
t->display ();
}
OUTPUT:
Display API x is 100
Inside T*()
Display API x is 100
[停止偷酒店房間鑰匙!](http://stackoverflow.com/a/6445794/46642) – 2013-02-21 14:15:39
如果你的問題是:「爲什麼每次我調用UB時都不會UB崩潰」,那麼答案是:「因爲它的UB」 – PlasmaHH 2013-02-21 14:16:53
你正在做一些你不允許的事情。詢問期望什麼沒有意義。 – 2013-02-21 14:22:17