日本产品和韩国产品哪个好/沈阳seo代理计费
一、什么情况下class需要使用动态内存变量?
需要用到大块内存的时候。比如,动态加载一个视频,一幅图片等等。我们无法事先预知视频或图片的大小。实现静态定义它的大小,有可能会出现空间不足或浪费的情况,所以这时候可以使用动态的方式申请内存。
二、实验
实验一:在class中定义指针,并且分配内存
//video.hpp
#ifndef __VIDEO_H_
#define __VIDEO_H_class video
{
public:int *pSpace;video(int size);~video();};
#endif
//video.cpp
#include <iostream>
#include "video.hpp"using namespace std;video::video(int size)
{cout << "video construct" << endl;this->pSpace = new int[size];
}video::~video()
{cout << "video deconstruct" << endl;delete []pSpace;
}#include <iostream>
#include "video.hpp"using namespace std;
//main.cpp
int main(void)
{int size = 10;video cartoon(size);for (int i = 0; i < size; i++){cout << cartoon.pSpace[i] << endl;}return 0;
}
实验结果
在class中使用动态内存变量要坚守一个原则:在构造函数中申请动态内存,在析构函数中释放。
实验二:使用valgrind工具查看内存泄漏
1、安装valgrind : sudo apt-get install valgrind
2、编译程序时带上调式参数,g++ video,cpp main.cpp -g -o app
3、使用:valgrind --tool=memcheck --leak-check=full --show-reachable=yes --trace-children=yes ./app
下面试验一下没有释放空间时候的效果
我申请了10个int类型的空间,但是没有在析构函数中释放,所以valgrind检测到有40个字节的内存泄露。
最后
工具只是一种辅助的手段,想要正正减少内存泄漏,减少bug,还是得从根本提高个人的编程水平。