使用重载运算符对类型进行就地销毁 ->
假设某些类型 Foo
有一个重载的 operator->
,它返回一个 Bar*
:
struct Foo
{
Bar* operator->();
};
如果我想破坏返回的 Bar< /code> 实例位于
Foo
类中,我可以编写以下内容吗?
this->~Bar();
g++ 不喜欢那个代码。如果我这样写就可以了:
(*this)->~Bar();
“递归转发规则”在这种情况下不适用吗?为什么不呢?
Suppose some type Foo
has an overloaded operator->
that returns a Bar*
:
struct Foo
{
Bar* operator->();
};
If I want to destruct the returned Bar
instance in-place from within the Foo
class, can I write the following?
this->~Bar();
g++ does not like that code. It works if I write this:
(*this)->~Bar();
Does the "rescursive forwarding rule" not apply in this case? Why not?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
以下是链接
->
的规则,可在标准的 13.5.6[over.ref]
中找到:由于
this
是一个指针,而不是一个类对象,因此它不适用。相反,5.2.5 (
[expr.ref]
) 中的这条规则适用:Here is the rule for chaining
->
, found in 13.5.6[over.ref]
of the standard:Since
this
is a pointer, not a class object, it doesn't apply.Instead, this rule in 5.2.5 (
[expr.ref]
) is applicable:因为
this
是一个指针,不是引用,并且指针的->
没有有返回进行转发的值。等价考虑Because
this
is a pointer and not a reference and->
for a pointer doesn't have a return value for forwarding to take place on. Consider equivalentlythis
是一个指向 Foo 类型对象的指针。您覆盖了运算符 ->对于对象,而不是指针。
尝试调用 Foo 中的 ~Bar() 方法。
有效,因为你调用 ->对象的运算符。
this
is a pointer to an object of type Foo.You overwrote the operator -> for the object, not the pointer.
attempts to call the ~Bar() method in Foo.
works because you call the -> operator of the object.