【问题标题】:Why is the 'this' keyword not a reference type in C++ [duplicate]为什么'this'关键字不是C ++中的引用类型[重复]
【发布时间】:2011-01-15 20:13:09
【问题描述】:

可能的重复:
Why ‘this’ is a pointer and not a reference?
SAFE Pointer to a pointer (well reference to a reference) in C#

C++ 中的this 关键字获取指向我当前对象的指针。

我的问题是为什么this 的类型是指针类型而不是引用类型。 是否存在this 关键字为NULL 的任何条件?

我的直接想法是使用静态函数,但 Visual C++ 至少足够聪明,可以发现这一点并报告static member functions do not have 'this' pointers。这在标准中吗?

【问题讨论】:

  • 不完全重复!另一个问题没有解决这里提出的次要问题,例如“this 可以为空吗?”。当这个问题结束时,我正在回答这个问题。
  • 关于this是否可以为空的问题,答案是否定的,不是在一个格式良好的程序中。
  • 在实践中,null this 会发生。如果您有一个指向对象的指针,并且该指针为空,并且您尝试调用一个方法(例如,p->method()),那么您经常会在该方法中崩溃,因为thisNULL。我确信编译器会有所不同。但this 在正确的程序中永远不会为空。

标签: c++ this keyword


【解决方案1】:

查看 Stroustrup 的Why is this not a reference

因为“this”在添加引用之前被引入 C++(实际上是带类的 C)。另外,我选择“this”来遵循 Simula 的用法,而不是(后来)Smalltalk 使用“self”。

【讨论】:

  • 为什么投反对票? ,这来自 BS(显然)
  • 也许有人认为我从重复的问题中复制了答案(事实并非如此,我在这一秒才发现它)。
【解决方案2】:

因为直到后来才将引用添加到 C++ 中。到时候再改就来不及了。

【讨论】:

    【解决方案3】:

    (可能不是一个完整的答案) 总是有对象需要用“危险”来删除自己的情况

    delete this;
    

    所以它可能必须是一个指针。

    M.

    【讨论】:

    • 如果是参考,您可以delete &this;
    • delete &this 甚至可能比delete this 更有优势,因为额外的& 可能会让你问自己是否真的被允许删除当前对象,即。如果它是在堆上动态分配的。 delete this 在这方面看起来更不引人注目,IMO。
    猜你喜欢
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2021-04-19
    • 2013-10-14
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多