在嵌套层次结构中动态分配“内部”结构是否更可取?如果父结构是动态分配的,那么它是否重要?为什么/如何重要?只是试图建立我对不同的,看似矛盾的方式的含义的理解,在我正在处理的代码库中处理内存。
例如,有什么好处:
struct Foo_type {
int i;
}; typedef struct Foo_type Foo;
struct Bar_type {
Foo f;
}; typedef struct Bar_type Bar;
int main() {
Bar* b = malloc(sizeof(Bar));
/* yada yada yada */
free(b);
return 0;
}
相反:
struct Foo_type {
int i;
}; typedef struct Foo_type Foo;
struct Bar_type {
Foo* f;
}; typedef struct Bar_type Bar;
int main() {
Bar* b = malloc(sizeof(Bar));
b->f = malloc(sizeof(Foo));
/* yada yada yada */
free(b->f);
free(b);
return 0;
}
它们是等同/不同的吗?
答案 0 :(得分:1)
作为@AndersK的补充。回答,第一种方法(非动态)是我们想要模仿继承,在派生的override func shouldAutorotate() -> Bool {
return false // adjust this
}
中声明基类struct
并将派生的基础转换为基数的首选方法(
struct
答案 1 :(得分:0)
在第一种情况下,结构包含在一个内存分配块中,因此您可以对其进行memcpy,只需要一个可以释放它。
如果两个你占用两个内存块不一定彼此相邻,那么你将有额外的麻烦来跟踪这两个块。
如果你开始在Bar_type中有更多的指针和成员,你将增加复制该类型实例的复杂性。