我正在查看一些遗留代码并遇到x=new(Foo);(请注意所提供类型的括号).我测试了变化,看起来和它一样x=new Foo;
Foo是非POD数据结构.一些外部内存泄漏程序正在标记该行 - 它为CORBA输出参数分配内存,因此调用者应该负责删除,但这是一个单独的问题,有许多间接层.
我的分析是否正确,是否可以接受?
根据此Unix文档http://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html
The memset() function is preferred over bzero().
For maximum portability, it is recommended to replace
the function call to bzero() as follows:
#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
Run Code Online (Sandbox Code Playgroud)
但是void *memset(void *s, int c, size_t n);第二个arg是一个整数,所以为什么他们建议使用'\ 0'而不是0?memset()文档说:“ memset()函数应将c(转换为无符号char)arg 复制到s所指向对象的前n个字节中的每个字节中。” 是更有效还是更明确?这里有最佳实践吗?