Tag: 新运算符

Scala中的“新”关键字

我有一个非常简单的问题 – 我们应该在Scala中创build对象时何时应用new关键字? 是否当我们只尝试实例化Java对象?

Malloc vs新 – 不同的填充

我正在为使用MPI进行高性能计算(10 ^ 5 – 10 ^ 6内核)的项目审查其他人的C ++代码。 该代码旨在允许不同体系结构(可能)不同机器之间的通信。 他写了一条评论,内容如下: 我们通常会使用new和delete ,但是在这里我使用malloc和free 。 这是必要的,因为一些编译器会在使用new时候填充不同的数据,导致在不同平台之间传输数据的错误。 malloc不会发生这种情况。 这不符合我从标准的new和malloc问题中所知道的任何东西。 new / delete和malloc / free有什么区别? 暗示编译器能够以不同的方式计算对象的大小(但为什么与使用sizeof不同呢?)。 malloc&placement new与new是一个相当stream行的问题,但是只讨论malloc不使用的new构造malloc ,这与此无关。 malloc如何理解alignment? 说,内存保证与new或malloc正确的alignment,这是我以前的想法。 我的猜测是,他在过去的某个时间误诊了自己的bug,并推断new和malloc给出了不同数量的填充,我认为这可能是不正确的。 但是我找不到Google或者之前任何问题的答案。 帮助我,StackOverflow,你是我唯一的希望!

安置新的和删除

什么是正确的方法来删除这里分配的所有内存? const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString)); delete (char*)buf; 要么 const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString)); delete buf; 或者他们都是一样的?

重载新/删除

我在我的程序中做了一个内存泄漏查找程序,但我的方式超载新的和删除(也是新的[]和删除[])似乎没有任何事情。 void* operator new (unsigned int size, const char* filename, int line) { void* ptr = new void[size]; memleakfinder.AddTrack(ptr,size,filename,line); return ptr; } 上面的代码片段显示了我重载new的方式。 我想这是运营商返回void *的东西,但我不知道该怎么办。