В этом случае, однако, возможно ли создать новый экземпляр этой структуры в куче, или мне нужно определить конструктор?Есть ли способ создать вещи в куче без оператора new?
Как уже было сказано ранее, вы можете создать новый экземпляр в куче с помощью new или malloc.
Или, еще лучше: не нужно ли мне так сильно цепляться за идею, что я не должен определять функции-члены для структур?
Это более интересный вопрос.Основное (только?) Различие между struct
и class
в c ++ - спецификатор доступа по умолчанию.Таким образом, struct
по умолчанию является общедоступным, а class
- частным.На мой взгляд, это разница, которая должна определять, какой из двух вы используете.По сути, если пользователи должны иметь прямой доступ к членам, то это должен быть struct
.
Если, например, у вас нет функций-членов, то, очевидно, предполагается, что члены объекта будут доступны напрямую, и это будет struct
.В случае объекта, который является всего лишь небольшим помощником private для реализации своего внешнего класса, как в вашем примере, тогда даже если у него есть функции-члены, он часто более ясен, чтобы разрешить доступ внешнего класса кего члены и так должно быть struct
.Зачастую с этими классами реализация внешнего класса тесно связана с реализацией внутреннего класса, и поэтому нет причин скрывать один от другого.
Таким образом, для тривиального (например, std :: pair)) объекты или объекты, использование которых ограничено (как в частном внутреннем классе), доступ по умолчанию к членам может быть хорошей вещью, и в этих случаях я бы сделал их structs
.