【问题标题】:What does *this = NULL mean inside a method in a templated class?*this = NULL 在模板类的方法中是什么意思?
【发布时间】:2012-02-06 11:15:40
【问题描述】:

在一个模板类中,我找到了表达式,*this = NULL 这样的表达式是什么意思?

以下是它的定义:

TYPE** getPtr() 
{
 *this = NULL;
 return &m_pPtr;
}

其中 m_pPtr 是模板类中的类型 TYPE*

赋值运算符:

// Assignment operator.
TYPE* operator =(TYPE *pPtr) {
  if (pPtr == m_pPtr)
    return pPtr;

  m_pPtr = pPtr;

  return m_pPtr;
}

毗湿奴。

【问题讨论】:

    标签: c++ templates null this


    【解决方案1】:

    如果不看实际代码,很难说这种说法的意义何在。

    但它可能会调用一个重载的赋值运算符。例如:

    #include <iostream>
    
    class X {
    public:
        void operator=(void *) {
            std::cout << "Here!\n";
        }
    
        void foo() {
            *this = NULL;
        }
    };
    
    
    int main() {
        X x;
        x.foo();
    }
    

    【讨论】:

    • @VishnuPedireddi:代码不足以找出原因。特别是,我们需要查看赋值运算符 (operator=) 和构造函数的定义,并了解这个类实际上是什么。
    • @VishnuPedireddi:嗯,*this = NULL 确实在调用赋值运算符,而后者又将 m_pPtr 设置为 NULL。我不能告诉你为什么会这样,因为你还没有说这门课是什么! (即课程的目的是什么)
    【解决方案2】:

    它试图将 0 分配给当前对象。它会调用类似的东西

    operator=(void *);
    

    另一种可能性(据我所知)是对象中有一个构造函数,它采用void* 或类似类型。然后它会构造一个对象,然后复制分配它。

    T :: T(void *);    // construct with the void *
    T :: T(const T &); // copy assignment
    

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2012-09-17
      • 2011-06-20
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2014-05-20
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多