C语言中构造函数和析构函数的命名约定

时间:2012-09-25 13:24:01

标签: c constructor naming-conventions destructor

假设我有一个struct list,我想提供一个“构造函数”和一个“析构函数”函数。我应该如何命名它们?

void list__init(struct list * self);
void list__construct(struct list * self);
void list__create(struct list * self);
...

void list__done(struct list * self);
void list__destruct(struct list * self);
void list__destroy(struct list * self);
...

在现实世界中是否存在一个主导的既定命名约定?

5 个答案:

答案 0 :(得分:8)

没有普遍接受的惯例。

当然,C ++在这个问题上影响了人们的观点。

就个人而言,我在函数执行内存分配时使用new(),如果不执行则使用init(),如果发生重新分配则使用delete(),否则使用cleanup()。

答案 1 :(得分:8)

GLib / GTK人员创建了使用_new_free为内存分配构造函数和析构函数以及_init_destroy用于非内存分配构造函数的约定。析构函数。

pthread库似乎主要遵循_init_destroy的约定,用于非内存分配和_create内存分配。

X11使用XOpenFooXCloseFoo

C库本身使用free用于非内存分配glob_twordexp_t等结构的清理。

所以,我猜答案是否定的,但肯定有很多人在某些项目中选择了特定的符号。

答案 2 :(得分:3)

我在一家使用init / deinit作为标准的公司工作,看起来很好。我想我已经从多个来源看过init / fini,据我所知,这是一个使名称长度相同的自负。

pthread_mutex_init / pthread_mutex_destroy(就地初始化)

sem_create / sem_destroy(返回一个新句柄,但观察Posix并不觉得需要区分释放句柄的“destroy”和一个就地销毁的“destroy” )

mpz_init / mpz_clear(就地初始化)

所以你可以做你喜欢的事,没有人可以合理地抱怨你忽略了“标准”。

答案 3 :(得分:1)

我使用以下约定:

  • 通过..._alloc()
  • 分配内存
  • 通过..._init()
  • 初始化
  • 通过..._create()
  • 组合分配和初始化
  • 通过..._discard()
  • 发布相关资源
  • 通过..._dealloc()..._free()
  • 发布内存
  • 通过..._destroy()
  • 合并释放资源和内存

答案 4 :(得分:0)

根据它是在“对象”还是某些“活动模块”,我通常会按照

<强>对象

INIT <----> TERMINATE

有效模块

INIT ---------> START 
 ^                ^
 |                |    
 |                v 
TERMINATE <----- STOP