/*malloc-free与new-delete的区别*/
/*new-delete 是C++运算符,malloc-free是标准库函数
*malloc-free 并不调用类中的构造/析构函数,new-delete每次调用相关函数,即new申请空间并初始成员,malloc只负责申请空间
*new的指针是带类型的,malloc则返回void类型指针(任意类型)
*new-delete在实现上实际调用了malloc-free函数
*/
#include <iostream>
using namespace std;
class Integer {
public:
Integer() : value(3)
{
cout << "调用无参构造函数 : " << value << endl;
}
Integer(int v) : value(v)
{
cout << "调用有参构造函数 : " << value << endl;
}
~Integer()
{
cout << "调用析构函数 : " << value << endl;
}
private:
int value;
};
int main()
{
cout <<"---malloc 不传参---" <<endl;
void* p1 = (Integer*)malloc(sizeof(Integer));
free(p1);
cout <<"---malloc 赋值---" <<endl;
Integer* p2 = (Integer*)malloc(sizeof(Integer));
getchar();
*p2 = 5;//这里p2的构造/析构函数在这里被调用
free(p2);
cout <<"---new 不传参---" <<endl;
Integer* p3 = new Integer;
delete p3;
cout <<"---new 不传参---" <<endl;
Integer* p4 = new Integer(5);
delete p4;
}
// 编译时最好加上 -fno-elide-constructors(拒绝编译器优化)
/*new-delete 是C++运算符,malloc-free是标准库函数
*malloc-free 并不调用类中的构造/析构函数,new-delete每次调用相关函数,即new申请空间并初始成员,malloc只负责申请空间
*new的指针是带类型的,malloc则返回void类型指针(任意类型)
*new-delete在实现上实际调用了malloc-free函数
*/
#include <iostream>
using namespace std;
class Integer {
public:
Integer() : value(3)
{
cout << "调用无参构造函数 : " << value << endl;
}
Integer(int v) : value(v)
{
cout << "调用有参构造函数 : " << value << endl;
}
~Integer()
{
cout << "调用析构函数 : " << value << endl;
}
private:
int value;
};
int main()
{
cout <<"---malloc 不传参---" <<endl;
void* p1 = (Integer*)malloc(sizeof(Integer));
free(p1);
cout <<"---malloc 赋值---" <<endl;
Integer* p2 = (Integer*)malloc(sizeof(Integer));
getchar();
*p2 = 5;//这里p2的构造/析构函数在这里被调用
free(p2);
cout <<"---new 不传参---" <<endl;
Integer* p3 = new Integer;
delete p3;
cout <<"---new 不传参---" <<endl;
Integer* p4 = new Integer(5);
delete p4;
}
// 编译时最好加上 -fno-elide-constructors(拒绝编译器优化)