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) 我有以下课程:
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,它显示了相同的行为.