C++基础(2)
new/delete 和 malloc/free之间的关系和使用
- 性质和作用
new/delete和malloc/free都是可以用来申请动态内存的,malloc/free是c函数库的函数
void *malloc(size_t size)
void free(void *prt)
而new/delete是C++里面的运算符 - 区别
malloc/free只会为我们申请一块动态内存,在实例化一个对象时不会调用类对象的构造函数,以及释放内存时不会调用析构函数。new/delete在实例化和释放对象时会分别调用构造函数和析构函数,由于类对象的属性可能存在使用时申请的动态内存,一般会在析构函数中进行判断和释放,在使用free后只会对对象的内存进行释放,不能调用析构函数,就会存在内存泄漏的风险。 - 使用delete和delete[]
在释放单个动态内存时使用delete,而在new了一个数组后,在释放时应该使用delete[],不仅是为了增加程序的可读性,而且会更加安全和可预期。 - 总结
在C++中,建议统一使用new/delete,而在C语言中,也要注意使用malloc/free,申请了内存记得释放,否则很容易存在内存泄露。