c – 我可以在堆上创建一个新结构而不定义构造函数吗?

我知道c中的结构和类之间的差异很小(两个?).尽管如此,我已被指示使用结构来定义简单的小东西,例如可能不需要成员函数的节点(尽管事实上我可以在技术上包括include成员函数).例如,我可以将节点定义为链表类的私有成员,如下所示:
class LinkedList {
  struct Node {
    MyObject *data;
    Node *next;
  };

  Node *list;

};

但是,在这种情况下,是否可以在堆上创建此结构的新实例,还是需要定义构造函数?有没有办法在没有new运算符的情况下在堆上创建东西?或者,更好的是:我是否没有必要紧紧抓住我不应该为结构定义成员函数的概念?我应该继续定义一个吗?或者,如果我这样做,是否就像承认Node真的应该是一个内部类,而不是内部结构?我真的应该担心这些事吗?哪个更具可读性?

谢谢!

解决方法

In this case,however,is it possible to create a new instance of this struct on the heap,or would I need to define a constructor? Is there a way to create things on the heap without the new operator?

如前所述,您可以通过new或malloc在堆上创建新实例.

Or,better yet: is it unnecessary for me to cling so tightly to the notion that I shouldn’t define member functions for structs?

这是一个更有趣的问题. c中struct和class之间的主要(仅?)差异是
认访问说明符.也就是说,struct认为public访问,class认为private.在我看来,这是差异,应该决定你使用哪两个.基本上,如果用户应该直接访问成员,那么它应该是一个结构.

例如,如果您没有成员函数,那么显然意图是直接访问对象的成员,因此它将是一个结构.如果一个对象只是一个小的私有助手来实现它的外部类,就像在你的例子中那样,那么即使它有成员函数,通常也允许外部类访问其成员,因此它应该是是一个结构.通常使用这些类,外部类的实现与内部类的实现紧密耦合,因此没有理由将它们隐藏在另一个类中.

因此,对于普通的(例如std :: pair)对象或那些使用受限的对象(如在私有内部类中),认访问成员可能是一件好事,在这些情况下我会使它们成为结构.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...