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

C++语言 码拜 7年前 (2015-11-16) 756次浏览
实际上都是为了偷懒
例如有如下的类
class MyStruct
{
    public: 
        void fun();
};
MyStruct *ptr = new MyStruct;
ptr->fun();
想法就是: 有这样一个智能指针,  实现, 在执行ptr->fun();的时候, 自动执行假如为空中, 则不调用fun().
有没有这样的智能指针, 或怎么实现这样的智能指针, 或能否实现这样的智能指针?
解决方案:60分
解决方案:30分
呃,这个不行,老老实实的 先if判断下再执行。
解决方案:30分
直接在MyStruct::fun里面判断this指针, 更安全, 不然都不知道出问题了没有.
假如是虚函数的话, 获取失败后, 返回一个dummy对象, 静态储存就行. 里面虚函数直接返回, 啥都不干.
解决方案:30分
没有。智能指针,只是实现了 operator ->, 并没有实现 函数调用
解决方案:30分
在本人知识范围内没有,不过可以看看shared_ptr的实现,然后实现本人的shared_ptr类,重载operator->操作符(假如没有持有this指针,则不调用函数)
解决方案:30分
写个宏什么的,在内部判断一下,调用的时候就不需要写if了
解决方案:30分
就加一个判断也不麻烦啊
解决方案:30分
假如指针为空,就说明没有生成对象。对象都没有,怎么样调用类的函数?
因此指针能否为空,还是需要手工判断。
主要是看你的智能指针想要实现什么功能?
一般智能指针是用来自动释放new创建的对象的。就像auto_ptr。
auto_ptr包含了对指针能否为空的判断,可以借鉴一下。
解决方案:30分
假设实现了这么一个智能指针,
当写下如下代码时:
int n = ptr->fun();
假如ptr为空,会发生什么情况?
假如为空中, 则不调用fun().
怎么样才能实现“不调用”,假如实现了“不调用”,
int n = ptr->fun();又怎么能编译通过,
假设编译通过了,运行后,n会是什么内容,
这是个难题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有没有这样的智能指针或有没有办法实现这样的智能指针
喜欢 (0)
[1034331897@qq.com]
分享 (0)