构造函数和析构函数必须是虚的?
Constructors and destructor must be virtual?
构造函数或析构函数是否为虚函数之间存在一些差异?遇到这种情况,应该怎么办
class A {
public:
A();
~A();
}
或
class A {
public:
virtual A();
virtual ~A();
}
这个案例有isocpp吗?
谢谢...
C++ 中不能有虚构造函数why no virtual Constructor。
当您可以通过指向基 class 的指针删除派生 class 的实例时,虚拟析构函数很有用。参考When to use Virtual Destructor.
你不能有虚拟构造函数,但虚拟析构函数可以通过基 class 指针销毁对象,同时适当地调用派生析构函数。
例如,实际上运行这个代码
class A {
public:
A() {}
~A() {}
};
class B : public A {
public:
B() {}
virtual ~B() {}
};
class C : public B {
public:
C() : _p( new int(0) ) {}
~C() { delete _p; std::cout << "Deleted p" << std::endl; }
private:
int *_p;
};
int main() {
C *c1 = new C();
C *c2 = new C();
B *bPointer = c1;
A *aPointer = c2;
std::cout << "Deleting through B*" << std::endl;
delete bPointer; // "deleted p"
std::cout << "------------" << std::endl;
std::cout << "Deleting through A*" << std::endl;
delete aPointer; // No output
return 0;
}
Class A 的析构函数应该标记为虚拟的。您只需要在层次结构的最顶层 class 写 virtual。
构造函数或析构函数是否为虚函数之间存在一些差异?遇到这种情况,应该怎么办
class A {
public:
A();
~A();
}
或
class A {
public:
virtual A();
virtual ~A();
}
这个案例有isocpp吗?
谢谢...
C++ 中不能有虚构造函数why no virtual Constructor。
当您可以通过指向基 class 的指针删除派生 class 的实例时,虚拟析构函数很有用。参考When to use Virtual Destructor.
你不能有虚拟构造函数,但虚拟析构函数可以通过基 class 指针销毁对象,同时适当地调用派生析构函数。
例如,实际上运行这个代码
class A {
public:
A() {}
~A() {}
};
class B : public A {
public:
B() {}
virtual ~B() {}
};
class C : public B {
public:
C() : _p( new int(0) ) {}
~C() { delete _p; std::cout << "Deleted p" << std::endl; }
private:
int *_p;
};
int main() {
C *c1 = new C();
C *c2 = new C();
B *bPointer = c1;
A *aPointer = c2;
std::cout << "Deleting through B*" << std::endl;
delete bPointer; // "deleted p"
std::cout << "------------" << std::endl;
std::cout << "Deleting through A*" << std::endl;
delete aPointer; // No output
return 0;
}
Class A 的析构函数应该标记为虚拟的。您只需要在层次结构的最顶层 class 写 virtual。