【发布时间】:2016-04-26 05:13:34
【问题描述】:
在阅读libssh library时,我看到他们特别说
libssh 遵循 allocate-it-deallocate-it 模式。使用 xxxxx_new() 分配的每个对象都必须使用 xxxxx_free() 释放
这是因为它是一个 C 库而不是一个 C++ 库,其中 new 和 delete 不存在,还是忘记 new 和 delete 并使用 xxxx_new 和 xxxx_free 手动创建和删除对象是一种常见的做法图案?如果这是一种常见做法,那么它与 new 和 delete 以及被调用的构造函数和析构函数相比有什么好处?
[编辑] 将链接添加到我在“libssh 库”上将其作为<a> 标记阅读的位置,供那些询问的人使用。
【问题讨论】:
-
你有链接到你读到的地方吗?
-
除了它是一个 C 接口之外,主要区别在于它改变了控制对象创建的人——消费者与库。有了这个接口,库控制更多,这赋予了它更多的权力(例如日志记录、断点、全局配置、避免来自不同 DLL 的不匹配的
new和delete调用等) -
ssh_new 与 ssh_free 配对,ssh_scp_new 与 ssh_scp_free 配对,ssh_string_new 与 ssh_string_free 配对,ssh_event_new 与 ssh_event_free 配对。分别针对 session、scp、string 和 event 对象的 allocate 和 free 函数,它隔离了分配器和对象的实现细节。 C++ 的 new 和 delete 运算符在 C 库中没有用。
-
因此,如果有人要编写这个库的 C++ 版本(或至少一个环绕它的库),那么坚持函数调用约定或使用传统的 C++ new 和 delete 是否有意义?合适的构造函数和析构函数?