码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的new与delete

时间:2016-05-08 18:01:56      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

C++中对象数组创建时,主要注意的点有:虚函数和带参数的构造函数,当出现虚函数时,对象数组中如通过父对象指向子对象,因为需要做Slice,析构时会造成指针错误引发内存泄露。测试程序如下:

class A {
private:
	int num;
public:
	A(int a):num(a){}
	virtual ~A() {}
	virtual void g() {cout << "A::g()" << endl;}
};

class B:virtual public A{
private:
	int num;
public:
	B():B(0) {}
	B(int b):A(b),num(b){}
	virtual ~B() {}
	virtual void g() {cout << "B::g()" << endl;}
};

 如出现下列方式使用对象:

A *pa = new B[2];

delete[] pa;

Valgrind检测会造成内存泄露,正确的方式为:

delete[] dynamic_cast<B*>(pa);

当无默认构造函数时,创建数组对象的方式如下:

A *pa = new A[2](10);//编译器无法通过编译,C++无此语言规范

vector<A*> pVa(10,new A(10));

C++中的new与delete

标签:

原文地址:http://www.cnblogs.com/maniford/p/5470944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!