1.什么是析构函数?
Ans。析构函数是一个成员函数,当对象被删除/销毁或超出范围时被调用。
class String {
private:
char* s;
int size;
public:
String(char*); // constructor
~String(); // destructor
};
2.在C++中使用析构函数的目的是什么?
Ans。析构函数的主要目的是释放在对象生命周期内分配的所有资源(打开的文件,打开的套接字,数据库连接,资源锁等)。
// CPP program to demonstrate destructors.
class Geeks {
private:
// a private-access pointer to integer
int* myPrvIntPtr;
public:
Geeks()
{
// default constructor
myPrvIntPtr = new int(0);
// allocate a new integer, place its address in myPrvIntPtr
}
~Geeks()
{
// de-allocate the integer whose address
// is stored in myPrvIntPtr
delete myPrvIntPtr;
}
};
3.构造函数的用途是什么?
构造函数是一个与类名称同名的特殊函数。在为您的类创建对象时调用构造函数。构造函数用于在创建对象时初始化对象的实例变量。构造函数还用于为虚拟函数创建虚拟表。
4.如果我不使用复制构造函数怎么办?它在哪里产生问题?
请参阅复制构造函数
5.当我们编写自己的C++编译器时,它会创建默认的构造函数吗?
在C++中,编译器默认情况下为每个类创建默认构造函数。但是,如果我们定义自己的构造函数,则编译器不会创建默认的构造函数。
6. C++中构造函数执行的顺序是什么?
Ans。首先执行基类构造函数,然后执行派生类构造函数,因此执行在继承树中自上而下进行。
7. C++中的析构函数执行顺序是什么?
Ans。通常派生类的析构函数,然后是基类的析构函数。除非我们将派生类对象带入基类指针(或引用变量),否则我们忘记为基类析构函数指定虚拟关键字。有关详细信息,请参见虚拟析构函数。
8.我们可以有虚拟的析构函数吗?如果是这样,虚拟析构函数的用途是什么。
Ans。我们可以。这是为了确保在运行时调用正确的类析构函数。具体来说,当我们使用基类指针或引用来保存派生类对象时。如果我们没有虚拟析构函数,那么它将最终仅调用基类析构函数。
// CPP program without virtual destructor
// causing undefined behavior
#include
using namespace std;
class base {
public:
base()
{
cout << "Constructing base \n";
}
~base()
{
cout << "Destructing base \n";
}
};
class derived : public base {
public:
derived()
{
cout << "Constructing derived \n";
}
~derived()
{
cout << "Destructing derived \n";
}
};
int main(void)
{
derived* d = new derived();
base* b = d;
delete b;
getchar();
return 0;
}