假设我有:
class Base {
public:
virtual ~Base() = 0;
}
class Derived: public Base {
public:
~Derived();
}
在我的代码中,我需要通过一个Derived指针删除Base类,如下所示:
delete[] pt_base;
但是,在已实现的析构函数中,我实际上没有任何要销毁的东西。但我仍然需要他们通过基类删除?
在不浪费大量代码和空析构函数的情况下,实现我想要的东西的最佳方法是什么?
我用的是gcc。我知道当我们销毁基类指针指向的派生类对象时,虚析构函数是如何解决这个问题的。我想知道它们是如何工作的?
class A
{
public:
A(){cout<<"A constructor"<<endl;}
~A(){cout<<"A destructor"<<endl;}
};
class B:public A
{
public:
B(){cout<<"B constructor"<<endl;}
我有两个类:
class A {
public:
virtual void somefunction() = 0;
};
class B : public A {
public:
B();
~B();
void somefunction();
};
B::B() {}
void B::somefunction() {
// some code
}
但是在使用g++时,我得到了错误:
class A has virtual functions and accessible non-virtual destructor
class B has vir
class A
{
public:
virtual ~A()
{
}
};
class B : virtual public A
{
public:
~B() throw()
{}
};
class C : public B
{
};
int main(int argc, char * argv [])
{
return 0;
}
该代码会给出以下错误:
error: looser throw specifier for ‘virtual C::~C()’
error: overriding ‘virtual B::~B() t
在本例中链接..。
我发现了一些章节,比如,~ImprovedClass() ~Inner()
请帮帮我,他们是什么?为什么和如何在代码中使用它们?
class Inner
{
public Inner(IntPtr unkOuter)
{
}
~Inner()
{
}
}
public class Improv
接口需要虚拟析构函数,还是自动生成的?例如,下面两个代码段中哪一个是最好的,为什么呢?请注意,这是全班学生。在Java语言中,没有其他方法、变量等,这是一个“接口”.
class Base
{
public:
virtual void foo() = 0;
virtual ~Base() {}
};
或者..。
class Base
{
public:
virtual void foo() = 0;
~Base() {} // This line can be omitted, but included for clarity.
};
编辑由于“不是我想要的”答
可能重复:
我正在实现一个单例,如下所示。
class A
{
public:
static A& instance();
private:
A(void)
{
cout << "In the constructor" << endl;
}
~A(void)
{
cout << "In the destructor" << endl;
}
};
A& A::instance()
{
sta
我有一个类,它包含一个析构函数可以抛出的对象(实际上是一个tbb::task_group,但为了简单起见,我把它命名为MyObject )。
代码如下:
#include <stdexcept>
class MyObject {
public:
MyObject() {}
~MyObject() noexcept(false) {}
};
class A {
public:
A() {}
virtual ~A() {}
};
class B : public A {
public:
B() : A() {}
~B() {}
p