【问题标题】:How to use 'new' insted of 'malloc' in code [closed]如何在代码中使用“new”而不是“malloc”[关闭]
【发布时间】:2014-12-26 12:17:34
【问题描述】:

我的代码如下所示

SP->xs = malloc(size * sizeof(double));

其中xs是结构变量,sizeint类型,

所以在这里我如何使用new 而不是malloc

我应该包含哪个头文件?以及这条新行的语法将如何变化?

我刚刚试了一下,如下所示

SP->xs = operator new sizeof(double)*[size];

当我编译这段代码时,会出现如下错误

error: cannot resolve overloaded function 'operator new' based on conversion to type 'double*'
error: expected ';' before 'sizeof'

因为我是 C++ 新手,所以我不太了解它的更多细节,

所以请描述一下如何在我的代码中使用new而不是malloc

感谢和问候

【问题讨论】:

  • 考虑购买一本 C++ 书籍。

标签: c++ malloc type-conversion


【解决方案1】:

相当于

SP->xs = malloc(size * sizeof(double));

SP->xs = new double[size];

这不需要任何#includes。

要释放分配的数组,请使用delete[]

delete[] SP->xs;

方括号很重要:没有它们,代码将编译但会有undefined behaviour

由于您使用 C++ 编写代码,请考虑使用 std::vector<double> 而不是手动管理内存分配。

【讨论】:

  • 两者并不完全等同:malloc( size * sizeof(double) ) 的类型为 void*,需要进行强制转换才能将其分配给 double*new double[size] 是类型安全的。 (不过,由于他的初始代码已编译,我们可能会假设 SP->xsvoid*。或者他正在将代码编译为 C,在这种情况下,new 将不起作用。)
  • 既然他明确要求:您可能会补充说您不需要包含任何内容即可使用标准new。 (您这样做是为了放置 new,但这是理解 C++ 的一步。)
猜你喜欢
  • 2010-10-22
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2010-10-03
  • 2015-08-08
  • 1970-01-01
相关资源
最近更新 更多