小编Osz*_*kar的帖子

为什么C++默认析构函数不会破坏我的对象?

C++规范说默认析构函数删除所有非静态成员.然而,我无法实现这一目标.

我有这个:

class N {
public:
    ~N() {
        std::cout << "Destroying object of type N";
    }
};

class M {
public:
    M() {
        n = new N;
    }
//  ~M() { //this should happen by default
//      delete n;
//  }
private:
    N* n;
};
Run Code Online (Sandbox Code Playgroud)

然后这应该打印给定的消息,但它不会:

M* m = new M();
delete m; //this should invoke the default destructor
Run Code Online (Sandbox Code Playgroud)

c++ destructor default

28
推荐指数
4
解决办法
2万
查看次数

为什么隐藏虚拟功能?

我有以下课程:

class A {
public:
    virtual void f() {}
};


class B : public A{
public:
    void f(int x) {}
};
Run Code Online (Sandbox Code Playgroud)

如果我说

B *b = new B();
b->f();
Run Code Online (Sandbox Code Playgroud)

编译器说错误C2660:'B :: f':函数不带0个参数.不应该B中的函数超载它,因为它是一个虚函数?虚拟函数会像这样被隐藏吗?

编辑:我的确意味着从A继承B,它显示了相同的行为.

c++ virtual hide

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

default ×1

destructor ×1

hide ×1

virtual ×1