动态创建对象与delete 使用
2016-05-15 16:20
561 查看
#include <iostream> #include <vector> using namespace std; class Circle { private: int r; public: Circle(){} ~Circle(){} Circle(int rr) :r(rr){} void print() { cout << "r = " << r << endl; } }; Circle *pCircle; vector<Circle*> allCircles; class Object { private: void* data; // 这里是一个万能的指针, const int size; const char id; public: Object(int si, char c) :size(si), id(c) { data = new char[size]; cout << "正在构造对象:" << id << ", size = " << size << endl; } ~Object() { cout << "正在创建析构对象:" << id << endl; delete[] data; // 析构函数将构造函数里创建的对象(指针)删除了, } }; int main() { Object* a = new Object(80, 'x'); delete a; /*void* b = new Object(20, 'b'); delete b; */ // 在这里delete void* 就不会去执行析构函数就不会将创建的指针对象删除掉,就会产生内存泄漏, // 如果程序中发现内存丢失的情况,那么就搜索所有的delete语句,如果delete删除的是void*类型,则可能是引起内存丢失的原因。 //int count; //cout << "你要画几个圆:" ; //cin >> count; //for (int i = 0; i < count; i++) //{ // pCircle = new Circle(i); // 用new 来动态创建一个指针,创建新的对象, // allCircles.push_back(pCircle); // 将创建的指针保存到向量中, //} //for (int i = 0; i < count; i++) //{ // allCircles[i]->print(); // 创建的都是指针, //} //for (int i = 0; i < count; i++) //{ // delete allCircles[i]; // 动态创建的都是需要delete 删除所创建的对象,要不然会占用内存导致内存泄漏, //} // delete[] 这个就是删除数组的模式,加上[] //// 动态创建的对象只保存在内存的堆里边,而内存里的静态内存保存全局变量,内存里的栈保存局部变量, return 0; }
相关文章推荐
- js 表单验证
- Problem G: Array C
- java 解析dom 树方式来解析XML文件
- leetcode 189
- Python 第一课,初接触。
- android开发中常用的快捷键
- iOS开发系列--IOS程序开发概览
- 构建之法阅读笔记06
- linux系统目录构成及相关命令
- [android] 出现 Unable to resolve target 'android-7'的解决办法
- Python:告别if...else...做真正面向对象的编程
- C#控制RichTextBox滚动条的方法
- CPU信息中的百分比
- java线程范围内的数据共享
- 2016-Q2 BUG清单
- Android studio 遇到的问题和解决方案
- 计算机视觉-相机模型
- 【Tyvj】P1001 第K极值【某下午刷水题系列】
- MQTT协议 - Mosquitto安装测试
- 一个简单WPF分页条控件