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