Bootstrap

malloc 和 new 的区别

malloc 和 new 的区别

对于普通的数据类型来说
malloc和new没有区别

对于类来说
malloc仅能分配内存
而new还会调用构造函数

示例:

class T
{
public:
    int a;
	T()
	{
		std::cout << "调用构造函数!" << std::endl;
	}
};
int main()
{
	T* t1 = new T;
	T* t2 = (T*)malloc(sizeof(T));
	t2->a = 100;
	std::cout << t2->a << std::endl;
}

输出:
调用构造函数!
100

只调用了一次构造函数,显然是构造t1时调用的
并且呢,这个malloc也是可以用来给类分配内存的,但是,仅可以说是这个例子是可以了,类的情况一但复杂,malloc必然是不能支持的

free和delete的区别

对于普通的数据类型来说free和delete没有什么区别,

但是对应类来说
free仅是释放内存
而delete还会调用析构函数

delete 和delete[]的区别

对于普通的数据类型来说
delete和delete[]没有什么区别

但是对于类来说
delete仅仅是释放内存空间
且调用第一个元素的析构函数

而delete[]不仅释放内存空间,
还会调用每一个元素的析构函数

;