很抱歉,如果这是一个非常基本的问题,我正在尝试运行以下程序,我收到了分段错误。
我的理解是什么?
有一个函数proc(t),其中t通过运算符T 连接到T *。因此,在执行proc(t)函数时,我们将有一个指向T 的指针类型,并且调用display()函数是合法的。
我想要什么?
1)我犯了哪个错误?。
2)我的理解是否正确?
#include <iostream>
using namespace std;
template <typename T>
class sPtr
{
private:
T * __pointee;
public:
operator T * () {
cout <<"Inside T* () "<<endl;
};
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 proc (JTest * tmp)
{
cout <<" proc"<<endl;
tmp->display ();
cout <<"Invoking JTest -> display "<<endl;
}
int main ( int argc, char ** argv)
{
sPtr <JTest> t(new JTest);
t->display();
proc(t); // Invokes operator T*().
}
答案 0 :(得分:2)
你的operator T*()
缺少一个return语句,所以它显然返回一个垃圾值(一个指向内存中随机位置的指针),并解除引用这个指针而不是段错误。
为什么你的编译器没有错误,这超出了我的范围。