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