哪个更优化:`new`还是`calloc`?
这个问题在这里已经有了答案:
好吧,每个人都告诉过你关于new
不初始化内存等,但他们忘记了值初始化语法:
char *buffer = new char[size]();
所以我会争辩说你总是使用new
。 如果你想初始化内存,使用上面的语法。 否则,请删除括号。
这个问题不能真正回答,因为它基于不正确的假设,即new
分配内存但不初始化它。 事实恰恰相反:
new
不仅分配内存(除非你使用“placement new”),它还会调用一些对象的构造函数。 即new
功能比calloc
更多。
在C ++中,如果你觉得你需要为一些可变大小的数组分配一些内存,可以考虑先使用标准容器,比如prefer
std::vector<char> buf( 1024 );
过度
char *buf = new char[1024];
calloc
并没有真正与new
相媲美; 它更接近operator new
(他们不一样)。 calloc
会将分配的内存归零,而operator new
和malloc
则不会。 new
在存储位置构造一个对象,但calloc
不会。
// Using calloc:
my_object* p = static_cast<my_object*>(std::calloc(1, sizeof(my_object)));
::new(static_cast<void*>(p)) my_object(10);
// Using operator new:
my_object* p = static_cast<my_object*>(::operator new(sizeof(my_object)));
::new(static_cast<void*>(p)) my_object(10);
// using new:
my_object* p = new my_object(10);
链接地址: http://www.djcxy.com/p/78483.html
上一篇: Which is more optimal: `new` or `calloc`?
下一篇: Initialization of a normal array with one default value