讲解c++中析构函数
时间: 2024-01-03 17:09:21 浏览: 27
在++中,析构函数是一种特殊的成员函数,其名称前必须加上一个波浪号(~),后面跟着类名,用于在对象销毁时自动调用。
析构函数的作用是在对象销毁前释放对象占用的资源,比如关闭文件、释放内存等。当一个对象被销毁时,其析构函数会自动调用,以确保对象所占用的资源能够被正确释放。
析构函数与构造函数相对应,构造函数用于初始化对象,析构函数用于清理对象。析构函数的写法与普通成员函数类似,但其名称前必须加上波浪号(~),并且不需要指定返回类型。
下面是一个示例:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Constructor called" << endl;
}
~MyClass() {
cout << "Destructor called" << endl;
}
};
int main() {
MyClass obj; // 创建对象
return 0;
} // 对象销毁,析构函数自动调用
```
上面的示例中,当对象被创建时,构造函数会自动调用,输出"Constructor called"。当对象被销毁时,析构函数会自动调用,输出"Destructor called"。
相关问题
析构函数中释放之前动态分配的内存,举例讲解
当我们使用动态分配内存时,需要手动释放这些内存,否则会导致内存泄漏。我们可以使用析构函数来释放动态分配的内存。
举一个例子,假设我们有一个名为MyClass的类,它有一个成员变量指针ptr,我们在构造函数中动态分配了一块内存给ptr,那么在析构函数中我们应该释放ptr指向的内存。
具体实现如下:
```c++
class MyClass {
public:
MyClass() {
ptr = new int[10];
}
~MyClass() {
delete[] ptr;
}
private:
int* ptr;
};
```
在上面的代码中,构造函数中我们使用new运算符为ptr动态分配了一块内存,然后在析构函数中使用delete[]运算符释放了ptr指向的内存。这样做可以保证我们的程序不会出现内存泄漏问题。
详细讲解如何在ubuntu中编写一个c++的类A,具有私有的数据成员i(为int型)构造函数 析构函数以及函数成员dispA()用来打印数据成员i保存为a.h和a.cpp
好的,我可以回答这个问题。在Ubuntu中编写一个C++的类A,具有私有的数据成员i(为int型),构造函数,析构函数以及函数成员dispA()用来打印数据成员i,可以按照以下步骤进行:
1. 打开终端,进入到你想要保存代码的目录下。
2. 创建一个名为a.h的头文件,输入以下代码:
```
#ifndef A_H
#define A_H
class A {
private:
int i;
public:
A(int i);
~A();
void dispA();
};
#endif
```
3. 创建一个名为a.cpp的源文件,输入以下代码:
```
#include "a.h"
#include <iostream>
A::A(int i) {
this->i = i;
}
A::~A() {}
void A::dispA() {
std::cout << "i = " << i << std::endl;
}
```
4. 在终端中输入以下命令编译代码:
```
g++ -c a.cpp
```
5. 编译成功后,输入以下命令生成可执行文件:
```
g++ -o main main.cpp a.o
```
6. 最后,在终端中输入以下命令运行程序:
```
./main
```
这样就可以在Ubuntu中编写一个C++的类A,具有私有的数据成员i,构造函数,析构函数以及函数成员dispA()用来打印数据成员i了。