小编use*_*471的帖子

'this'是局部变量吗?

这里我举一个重载增量运算符的例子:

 class Digit
 {
     int m_digit;

  public:
      Digit (int value)   //constructor
          {
            m_digit = value;
          }

      Digit& operator++();

      int ret_dig (){return m_digit;}
};

Digit& Digit::operator++()
{
   if (m_digit == 9)
        m_digit = 0;

   else  ++m_digit;
    return *this;
 }

int main ()
{
   Digit my_dig (5);
   ++my_dig;
 return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我被告知无法返回局部变量."这个"不是局部变量吗?这是我的想法:

Digit类型的指针附加到成员函数(重载操作符函数).当编译器看到行++ my_dig(即Digit类的实例)时,它会调用成员函数.实例my_dig的地址作为参数传递给函数,并且有一个名为"this"的隐藏"const Digit*"来捕获参数."this"被解除引用(隐式)访问m_digit,这是类Digit的成员变量.所有增量或包装都在函数内部完成,然后对解除引用的"this"的引用返回给调用者.是的,这是我的困惑.如果"this"是const数字*类型的局部变量,返回时它不应该包含垃圾,因为"this"超出了块结束haaa的范围吗?

c++ this this-pointer

3
推荐指数
1
解决办法
97
查看次数

当类的指针实例超出范围时,是否会调用析构函数?

以此代码为例:

  class MyClass
   {
   public:
  ~MyClass()
   {
     cout << "Destructor called\n";
    }
   };

  int main()
   {
      MyClass Testvar;
      //  destructer called for this
      MyClass *ptrvar;
      ptrvar = &Testvar;
      // but not for this
   }
Run Code Online (Sandbox Code Playgroud)

它给我带来了很多困惑.上面的代码打印:析构函数只调用一次.我在main中声明了两个MyClass实例,其中一个是MyClass类型的普通变量,另一个是指向普通变量的相同类型的指针.这里不需要析构函数(没有动态分配),但为了举例,我在类中定义了一个.因此,因为定义了两个类实例,所以应该两次调用析构函数.但是,当我运行此代码时,这不会发生.如果我删除指针并定义一个更正常的实例,程序将打印:

Destructor调用了Destructor

我的观察是当指针实例超出范围时,不会隐式调用析构函数.我是对的还是只是遗漏了什么.

c++ destructor

-2
推荐指数
1
解决办法
271
查看次数

标签 统计

c++ ×2

destructor ×1

this ×1

this-pointer ×1