我有一个智能指针类,我想重载operator->
;它提供了方便,因此我可以直接访问包含在智能指针内的类的成员。在C++中重载operator->
我在寻找Boost在其shared_ptr
模板中实现此运算符的方式。我注意到他们添加了一个断言检查,如果指针在返回之前确实是非空的。目前,我的操作符返回指针而不检查它是否为空(实质上,在我当前的实现中空指针是未定义的行为)。我是否应该添加这个断言?
(另外,怎么叫这个操作?我找不到这个在网络上。)
我有一个智能指针类,我想重载operator->
;它提供了方便,因此我可以直接访问包含在智能指针内的类的成员。在C++中重载operator->
我在寻找Boost在其shared_ptr
模板中实现此运算符的方式。我注意到他们添加了一个断言检查,如果指针在返回之前确实是非空的。目前,我的操作符返回指针而不检查它是否为空(实质上,在我当前的实现中空指针是未定义的行为)。我是否应该添加这个断言?
(另外,怎么叫这个操作?我找不到这个在网络上。)
这取决于你。你可以简单地记录一下,使用它的空指针是未定义的,什么也不做,你可以断言,你可以抛出一个异常。没有一个正确的答案。就个人而言,我可能会抛出一个异常。
好的,谢谢!我用一个断言来说:如果我最终试图通过空指针调用一个函数,它将成为我程序员的错。 (至少在我的应用程序中,因为没有输入,用户可以给这个输入在null上调用'operator->'。) – 2011-06-09 21:17:00
调用你自己的班级“聪明”任何事情都是灾难的秘诀。 – 2011-06-09 18:22:52
你想要不确定的行为吗?它的100%是您在实施中的选择。我不认为这里有人能告诉你你是否应该*或*不应该*添加这样的功能。 – 2011-06-09 18:23:48
@Tomalak这就是他们所谓的 - 智能指针。我没有编名。 ;) – 2011-06-09 20:17:53