【问题标题】:How good is "new/delete" on struct in place of "malloc/free", in C++?在 C++ 中,结构上的“new/delete”代替“malloc/free”有多好?
【发布时间】:2015-04-05 16:57:59
【问题描述】:

很多时候,我在 C++ 代码中看到结构的指针分配为;

struct Current{
int amp;
};

Current *cur = new Current();

但是,“Current”在这里是一个结构而不是类,但在 C++ 中受支持。用它来代替 C 类型分配有多好,如下所示:

Current *cur = (Current*) malloc (sizeof(Current));

这背后的基本概念是什么?我知道的是,“结构”在 C++ 中被视为“类”。

C++ 中 struct-VS-class 的概念是已知的。查询主要是关于特定用例的,因为两者都是允许的,但应该优先考虑哪个,为什么?

【问题讨论】:

  • C/C++ Struct vs Class 的可能重复项
  • 在 C++ 中,建议使用 new/delete 而不是使用 malloc()/free(),即使对于结构(与类相同,除了成员变量默认是公共的)
  • 结构/类,真的一样。无论如何,你为什么首先使用动态分配?你确定你需要它吗?通常不熟悉 C++ 的人喜欢无缘无故地使用 new 关键字。这就是为什么它被称为new。它是newbie 的缩写。

标签: c++ class struct


【解决方案1】:

在 C++ 中,structclass 相同,只是它具有默认的 public 成员,以及默认的 public 继承。

至于malloc的使用,虽然可以使用,但正如你所说的C型分配,不应该用于C++。如果必须,您可以使用 malloc/free 对结构和类使用相同的方式。

但是,正确的C++ 方式是使用newdeletestructclass 的使用方式相同。


如果您对为什么应该使用 new/delete 而不是 malloc/free 感到好奇,我建议您参考这个 Q/A:In what cases do I use malloc vs new?


就括号的使用而言,即:

Current *cur = new Current();
//vs.
Current *cur = new Current;

看到这个:Do the parentheses after the type name make a difference with new?

我只是做了自己,并且学到了一些新东西。

【讨论】:

  • New 也调用构造函数,与 malloc 相反
  • 括号在这种情况下实际上有所不同。
  • 您能否详细说明为什么括号 @LightningRacisinObrit 没有任何问题?看来你可能是对的。但我不确定这是为什么。
  • new Current() 会将 amp 初始化为 0,而 new Current 不会。括号实际上更好。
  • @swalog 说不应该使用它们是错误的。在这种情况下,使用它们会导致 amp 的零初始化。没有它们,amp 将保持未初始化状态。
【解决方案2】:

你误解了structs。

然而,“Current”在这里是一个结构而不是类,但在 C++ 中是受支持的

错了。 Current 一个类。如果您使用关键字 class 而不是关键字 struct 声明它,它也将是一个类。

提供关键字struct 是为了向后兼容,使用它会更改定义语法中的一些可见性默认值。但是,否则,您仍然只是定义一个类。

当然,使用 struct 定义的类没有什么神奇之处,这意味着您应该回到古老的 C 风格分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多