【发布时间】:2017-05-03 08:37:11
【问题描述】:
21 世纪 C:
避免与 malloc 相关的错误的最简单方法是不使用 malloc。
和
生产代码往往很少使用 malloc,通常包装在 new/copy/free 函数中,因此主代码不必进一步处理内存管理。
主要问题:有人可以提供一个超级简单、惯用的示例,说明如何使用这样的函数包装器来颠覆free 和malloc 的直接用法?
次要问题(可选): 特别是,巧妙地使用此类函数能否模拟 C++ shared_ptr 和 unique_ptr 的行为(甚至某些行为)?也就是说,使用这些函数可以让您不必担心您可能会意外释放悬空指针和/或创建泄漏?或者这在 C 语言中是不可能的,即使使用这样的函数?
【问题讨论】:
-
关于第二个问题,C++ 智能指针过于依赖 RAII,这只是因为当局部变量超出范围时会自动调用析构函数。可以使用宏来模拟其中的一些功能,但远不如 C++ 中的可靠。
-
你不能通过包装
malloc来封装内存管理。我不知道那本书的作者在抽什么烟。 -
@n.m.我想他/她正在谈论添加编译时类型检查。
-
“谁能提供一个超级简单、惯用的例子……”你读的这本书没有提供一些东西吗?
-
"或者这在 C 语言中是不可能的" 是的,至少如果你不关心你在做什么的话。 C 是“危险的”,因为您通常在 自己动手 时会这样做。 “...即使使用这些功能?”是的,再次。