微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)对象或那些使用受限的对象(如在私有内部类中),认访问成员可能是一件好事,在这些情况下我会使它们成为结构.

原文地址:https://www.jb51.cc/c/119487.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐