2011-06-09 77 views
4

我有一个智能指针类,我想重载operator->;它提供了方便,因此我可以直接访问包含在智能指针内的类的成员。在C++中重载operator->

我在寻找Boost在其shared_ptr模板中实现此运算符的方式。我注意到他们添加了一个断言检查,如果指针在返回之前确实是非空的。目前,我的操作符返回指针而不检查它是否为空(实质上,在我当前的实现中空指针是未定义的行为)。我是否应该添加这个断言?

(另外,怎么叫这个操作?我找不到这个在网络上。)

+2

调用你自己的班级“聪明”任何事情都是灾难的秘诀。 – 2011-06-09 18:22:52

+4

你想要不确定的行为吗?它的100%是您在实施中的选择。我不认为这里有人能告诉你你是否应该*或*不应该*添加这样的功能。 – 2011-06-09 18:23:48

+0

@Tomalak这就是他们所谓的 - 智能指针。我没有编名。 ;) – 2011-06-09 20:17:53

回答

3

这取决于你。你可以简单地记录一下,使用它的空指针是未定义的,什么也不做,你可以断言,你可以抛出一个异常。没有一个正确的答案。就个人而言,我可能会抛出一个异常。

+0

好的,谢谢!我用一个断言来说:如果我最终试图通过空指针调用一个函数,它将成为我程序员的错。 (至少在我的应用程序中,因为没有输入,用户可以给这个输入在null上调用'operator->'。) – 2011-06-09 21:17:00

2

我应该添加此断言呢?

如果你没有它就快乐,那很好。 只要确保它有记录:这是重要的事情。

(另外,怎么叫这个操作?我无法在网络上找到。)

它并没有真正有一个名字。该标准只是称其为“->运营商”,也称之为“集体成员接入运营商之一”([expr.const])。

维基百科lists它作为“由a指向的对象的成员b”(其中,是的,其他操作符被给予简洁标识符)。

+2

我通常只是称它为“_other_ dereferencing操作符”。 :-P – ildjarn 2011-06-09 18:26:07

+2

我称之为“箭头”操作符。 – 2011-06-09 18:36:43