在C中模拟Optional / Nullable作为为存在的对象分配的指针?

时间:2015-11-03 16:12:25

标签: c nullable

我已经看到一些代码在C中模拟了Optional / Nullable值作为仅在对象存在时分配的指针。所以它看起来像这样:

typedef struct X_str {
  int *field_a;
} X;

void do_initialization(X* obj) {
  obj->field_a = malloc(sizeof(int));
  *(obj->field_a) = // assign some value here
}

void do_processing_elsewhere(X* obj) {
   if (obj->field_a == NULL) {
      // Do no processing related to field_a
   } else {
      // Do some processing related to field_a
   }
}

恕我直言,这至少是做这种事情的奇怪方式,因为内存分配器会因为没有特殊原因而碎片化。有没有一种正确的方法来做类似Nullable的行为(如果你没有可以隐含地产生null的难以辨认的对象比较)?字段是公共的,因此提供访问器功能(可以更新位存在标志)不会给予太多,除非你强加人们会使用它们。语言是C而不是C ++(存在其他解决方案)。

0 个答案:

没有答案