有没有这样的智能指针可能有没有办法实现这样的智能指针

有没有这样的智能指针或者有没有办法实现这样的智能指针
实际上都是为了偷懒
比如有如下的类
class MyStruct
{
    public: 
        void fun();
};

MyStruct *ptr = new MyStruct;

ptr->fun();

想法就是: 有这样一个智能指针,  实现, 在执行ptr->fun();的时候, 自动执行如果为空中, 则不调用fun().

有没有这样的智能指针, 或者怎么实现这样的智能指针, 或者能否实现这样的智能指针?
------解决思路----------------------
http://bbs.****.net/topics/390787357
------解决思路----------------------
呃,这个不行,老老实实的 先if判断下再执行。
------解决思路----------------------
直接在MyStruct::fun里面判断this指针, 更安全, 不然都不知道出问题了没有.
如果是虚函数的话, 获取失败后, 返回一个dummy对象, 静态储存就行. 里面虚函数直接返回, 啥都不干.
------解决思路----------------------
没有。智能指针,只是实现了 operator ->, 并没有实现 函数调用
------解决思路----------------------
在我知识范围内没有,不过可以看看shared_ptr的实现,然后实现自己的shared_ptr类,重载operator->操作符(如果没有持有this指针,则不调用函数)
------解决思路----------------------
写个宏什么的,在内部判断一下,调用的时候就不需要写if了
------解决思路----------------------
就加一个判断也不麻烦啊
------解决思路----------------------
如果指针为空,就说明没有生成对象。对象都没有,如何调用类的函数?
因此指针是否为空,还是需要手工判断。
主要是看你的智能指针想要实现什么功能?
一般智能指针是用来自动释放new创建的对象的。就像auto_ptr。
auto_ptr包含了对指针是否为空的判断,可以借鉴一下。
------解决思路----------------------
假如实现了这么一个智能指针,
当写下如下代码时:
int n = ptr->fun();
如果ptr为空,会发生什么情况?
如果为空中, 则不调用fun().
如何才能实现“不调用”,如果实现了“不调用”,
int n = ptr->fun();又怎么能编译通过,
假如编译通过了,运行后,n会是什么内容,
这是个难题