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[]不仅释放内存空间,
还会调用每一个元素的析构函数