11

假设我有一个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);
...

是否存在在现实世界中占主导地位的既定命名约定?

4

5 回答 5

11

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

pthread 库似乎主要遵循非内存分配和内存分配_init的约定。_destroy_create

X11 使用XOpenFooXCloseFoo

C 库本身使用的用于对结构(如和free)进行非内存分配清理。glob_twordexp_t

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

于 2012-09-25T13:45:54.750 回答
10

没有普遍接受的约定。

当然,C++ 在这件事上影响了人们的看法。

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

于 2012-09-25T13:27:48.717 回答
4

我正在使用以下约定:

  • 内存分配通过..._alloc()
  • 通过初始化..._init()
  • 通过组合分配和初始化..._create()
  • 通过释放相关资源..._discard()
  • ..._dealloc()通过或释放内存..._free()
  • 通过联合释放资源和内存..._destroy()
于 2012-09-25T13:51:01.203 回答
3

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

pthread_mutex_init/ pthread_mutex_destroy(就地初始化)

sem_create/ sem_destroy(返回一个新句柄,但请注意 Posix 不需要区分释放句柄的“销毁”和就地销毁的“销毁”)

mpz_init/ mpz_clear(就地初始化)

因此,您可能可以做自己喜欢的事情,没有人可以合理地抱怨您忽略了“标准”。

于 2012-09-25T13:49:08.620 回答
0

根据它是在“对象”还是某个“活动模块”上,我通常会遵循

对象

INIT <----> TERMINATE

活动模块

INIT ---------> START 
 ^                ^
 |                |    
 |                v 
TERMINATE <----- STOP
于 2012-09-25T13:34:16.010 回答