将malloc转换为new的正确方法 我将C代码转换成C++代码,这就是我如何将MALLC转换为新的< /P> frame.p_data = (uint8_t*)malloc(xres * yres * 4); free(frame.p_data); frame.p_data = (uint8_t*)operator new(xres * yres * 4); delete(frame.p_data);

将malloc转换为new的正确方法 我将C代码转换成C++代码,这就是我如何将MALLC转换为新的< /P> frame.p_data = (uint8_t*)malloc(xres * yres * 4); free(frame.p_data); frame.p_data = (uint8_t*)operator new(xres * yres * 4); delete(frame.p_data);,c++,c++11,C++,C++11,这是从malloc更改为new的正确方法吗?删除是否会释放所有数据。否,您应该写入 frame.pdata = new uint8_t[xres * yres * 4]; delete [] frame.pdata; 明确调用分配函数operator new是非常罕见的,但如果这样做,则需要将其与解除分配函数operator delete匹配,否则行为未定义: frame.p_data = (uint8_t*)operator new(xres * yres * 4); operator de

这是从malloc更改为new的正确方法吗?删除是否会释放所有数据。

否,您应该写入

frame.pdata = new uint8_t[xres * yres * 4];
delete [] frame.pdata;
明确调用分配函数
operator new
是非常罕见的,但如果这样做,则需要将其与解除分配函数
operator delete
匹配,否则行为未定义:

frame.p_data = (uint8_t*)operator new(xres * yres * 4);
operator delete(frame.p_data);
malloc
与基元类型一起使用也没有问题,只要您记得取消分配
free
,但是坚持
new
/
delete
就更容易了,而且不必记住。

展示了如何使用new/delete,但是这个建议似乎并不正确/完整

正确的方法(将通过主流代码审查)不是首先用
new
/
delete
替换它,而是直接转到容器/智能指针
std::vector
(或
std::array
如果是静态大小)具有所需的所有工具,因为
std::vector
是中的动态数组。如果大小跟踪开销过大,则
std::unique\u ptr
std::array

简化示例:

std::vector<uint8_t> data;

data.resize(xres * yres * 4);

uint8_t* pdata = data.data(); // <- access to raw buffer
std::矢量数据;
数据。调整大小(xres*yres*4);

uint8_t*pdata=data.data();//如果你使用C++,你可能也会使用C++的C++版本,与C CassDO相比,你想将代码移植到C++ 11,或者只是通过<代码>新< /Cord> s来交换<代码> MalOC s?智能指针和RAII是编写安全代码的好方法
malloc
需要字节大小,而不是
new
。您应该详细说明示例中的所有类型。此外,您需要代码>删除[]/COD>而不是<代码>删除< /代码>。<代码> MalCal完全是好的C++。没有必要改变任何事情<代码>新的
并不是天生的更好、更安全或任何东西。
新的
-
删除
<代码>操作员新建-
操作员删除
。对于操作员新返回的内容,不要使用
delete
(和
delete[]
)。这是未定义的行为。同样,使用
new
时,您不需要强制转换,也不需要记住乘以
sizeof(…)
。我认为新手在应该使用例如向量时建议使用new/delete是错误的。有关更多详细信息,请参见我的答案。@darune使用什么取决于向量和数据各自的生命周期。