何时值得在结构定义中使用指向struct的指针?

4 c struct pointers memory-management

对不起,如果问题不明确; 我发现用一句话很难解释.

假设我有一个struct成员struct,例如以下内容:

struct A {
    struct B b;
};
Run Code Online (Sandbox Code Playgroud)

让我们说我打算总是将这个结构的实例分配给堆.通过改变它可以获得什么?(即保持指针struct B)

struct A {
    struct B *b;
};
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,我有一对夫妇的功能,如make_Afree_A这将需要分配和取消分配内存的护理指向b;

我可以想到第二种形式可能更可取的唯一例子是,并非所有实例struct A都会实际使用b.在这种情况下,可以通过仅为需要它的那些实例分配额外的内存来保存内存.

是否有其他情况下第二种形式提供了有用的东西?

Jas*_*hen 7

如果每一个A都对应一次B,你应该使用指针B.

除了你不需要额外的内存管理之外,它实际上更慢,分配效率更低B.

即使您想将指针传递B给其他代码,您仍然可以传递该地址.


ojb*_*ass 5

当B的实例可以由A的多个实例共享时,您将通过指向B来获得它.它有助于避免在多个位置重复和维护B的版本.根据乔纳森的评论,这是以知道何时释放内存和宣传B的参考为代价的.