#include <iostream>
#include <memory>
using namespace std;
class Line
{
public:
Line(double len, int a); // 这是构造函数声明
~Line(); // 这是析构函数声明
private:
double length;
double* nums;
};
Line::Line(double len, int a)
{
length = len;
nums = new double[a];
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
delete [] nums;
cout << "Object is being deleted" << endl;
}
int main() {
Line* line = new Line(1.0, 2);
delete line;
{
shared_ptr<Line> aaa = make_shared<Line>(1.0, 2);
}
return 0;
}
我对这个程序的理解如下:
delete line;将做出以下动作:
-
先调用 Line 的析构函数,再释放 line 指向的内存(使用全局的::operator delete )。
- double 占 8 字节,double*占 4 字节,但考虑内存对齐,所以 line 占的内存为 16 个字节。
-
在 Line 的析构函数中,执行 delete [] nums;
- 先调用 double[]的析构函数(话说有这种玩意吗??)
- 再释放 double[]的内存(使用全局的::operator delete [])
shared_ptr<Line> aaa局部变量做的事情和delete line;一样。
各位大佬看下我的理解对吗