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

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

概述我知道c中的结构和类之间的差异很小(两个?).尽管如此,我已被指示使用结构来定义简单的小东西,例如可能不需要成员函数的节点(尽管事实上我可以在技术上包括include成员函数).例如,我可以将节点定义为链表类的私有成员,如下所示: class LinkedList { struct Node { MyObject *data; Node *next; }; Node 我知道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 – 我可以在堆上创建一个新结构而不定义构造函数吗?全部内容,希望文章能够帮你解决c – 我可以在堆上创建一个新结构而不定义构造函数吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存