new 与 malloc 的区别
(1)new 是 C++ 操作符,malloc 是 C 库函数。
(2)对于非内部数据结构的对象而言,malloc 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于 malloc 是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free。
(3)new 可以认为是 malloc 加构造函数的执行。
(4)new 出来的是对象,而 malloc 出来的是 (void *)
如何禁用掉拷贝构造函数与赋值操作符?
在类里声明但是不定义。禁用后可以防止”浅拷贝”。
附:浅拷贝指当一个类里有指针成员指向 new 出来的数据时,当用一个对象来初始化另一个对象的时候,若将数据重新 new 一个,则为深拷贝,否则为浅拷贝。浅拷贝容易造成的问题是当一个对象析构后另一个对象访问该指针会出问题。
调用拷贝构造函数的情况:(1)一个对象以值传递的方式传入函数体(2)一个对象以值传递的方式从函数返回(3)一个对象定义时需要通过另一个对象进行初始化。