gpt4 book ai didi

c++ - 为什么使用 XXXX_new 和 XXXX_free 而不是 new 和 delete?

转载 作者:行者123 更新时间:2023-11-30 03:42:23 24 4
gpt4 key购买 nike

读入 libssh library 时,我看到他们专门说

libssh follows the allocate-it-deallocate-it pattern. Each object that you allocate using xxxxx_new() must be deallocated using xxxxx_free()

这是因为它是一个 C 库而不是一个 C++ 库吗,其中 new 和 delete 不存在,或者忘记 new 和 delete 并使用 xxxx_new 和 xxxx_free 手动创建和删除对象是一种常见的做法图案?如果它是一种常见的做法,它比 new 和 delete 以及调用的构造函数和析构函数有什么好处?

[编辑] 添加链接到我阅读此内容的位置 <a>为那些询问的人在“libssh 库”上添加标签。

最佳答案

乍一看您提供的链接,您会发现 libssh 使用 xxxx_new() 函数作为组合的分配器/构造函数调用。它实际上只是工厂函数的标准命名。同样,xxxx_free() 充当析构函数/释放函数组合。

每当库想要为其用户代码提供类型安全的不透明指针时,将分配和构造结合到单个函数调用中是一个好主意:要编译用户代码,编译器只需要知道类型存在并且它是不同的来自任何其他类型。无需在公共(public) header 中包含完整的 class/struct 声明。

这种方法在 C++ 库中不是很流行,因为它们通常希望它们的对象表现得像任何普通的 C++ 对象(这意味着指针/引用不能对编译器不透明)。但是,如果一个库提供了一个 C 接口(interface),这样的工厂函数就不太可能因为用户将指针传递给未初始化的对象(忘记构造函数调用)而导致您遇到奇怪的错误,或者搞砸了您的对象分配。

关于c++ - 为什么使用 XXXX_new 和 XXXX_free 而不是 new 和 delete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com