您的位置:首页 > 其它

动态创建对象与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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: