小编Pee*_*dit的帖子

虚拟析构函数如何在C++中工作

我会输入一个例子:

class A
{
public:
virtual ~A(){}
};

class B: public A
{
public:
~B()
{
}

};



int main(void)
{
A * a =  new B;
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在在上面的例子中,析构函数将以递归方式从下到上调用.我的问题是编译器如何做这个MAGIC.

c++

11
推荐指数
2
解决办法
7886
查看次数

默认构造函数递归崩溃

/*以下程序似乎神秘地输入递归,即使看不到任何东西.编译器:g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3机器:x86操作系统:Ubuntu 10.04 64位

*/

    #include<iostream>
    using namespace std;

    class Test
    {
    public:
      Test ():x(9)
      {
        cout << " Test::Test\n";
        Test (x);
      }
      Test (int a)
      {
        cout << " Test::para\n";
      }
    private:
            int x;
    };


int main(void)
{
 Test a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

c++

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

派生和基类对象的内存地址?

我试图找出Derived类和Base Class Object的地址,我发现它们是一样的.实际上,我很困惑如何得到两者的地址?

#include<stdio.h>
class Base {
    public:
        Base ()
        {
            printf ("\n Base :: %p\n", this);
        }
        ~Base () { 
            printf ("\n Base::~Base\n");
        }
};

class Der:public Base {
    public:
        Der () {
            printf ("\n Der: %p \n", this);
        }
        ~Der () {
            printf ("\n Der:: ~Der\n");
        }
};

int main(void) {
    Base b;
    Der d;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×3