gpt4 book ai didi

c++ - 是否有适合 'ownership-in-a-package' 的 'handles' 可用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:44 26 4
gpt4 key购买 nike

Handles除了指针之外还有适当的语义。所以对我来说这样的例子(从 Rule of Zero 中提取):

class module {
public:
explicit module(std::wstring const& name)
: handle { ::LoadLibrary(name.c_str()), &::FreeLibrary } {}

// other module related functions go here

private:
using module_handle = std::unique_ptr<void, decltype(&::FreeLibrary)>;

module_handle handle;
};

使用 unique_ptr 作为句柄的“包中所有权”是一个不好的例子。首先,它利用句柄是指针类型的内部知识,并使用它为“不透明”句柄类型构建的基本类型创建 unique_ptr

句柄可以是任何类型,它们可以是指针,它们可以是索引或者谁知道呢。最重要的是,您手头上(例如大多数 C API)是一个句柄及其资源释放函数。

在句柄语义中是否存在有效的适当“包中所有权”?我的意思是,已经公开可供使用?

对我来说,unique_ptr 等。阿尔。行不通,我必须对句柄类型是什么做出不必要的假设,而我想要的只是通过不透明句柄类型及其释放获得“包中所有权”功能,唯一。

查看句柄类型内部以根据此信息进行构造是没有意义的。这是一个句柄,应该无关紧要。

我将在这里引用另一个 SO 用户在 another question's 中的感受answer :

Create a specific "smart pointer" class, won't take long. Don't abuselibrary classes. Handle semantics is quite different from that of aC++ pointer; for one thing, dereferencing a HANDLE makes no sense.

One more reason to use a custom smart handle class - NULL does notalways mean an empty handle. Sometimes it's INVALID_HANDLE_VALUE,which is not the same.

免责声明:

这个问题重新表述并建立在这个问题的基础上:

最佳答案

unique_ptr 类型不如短语“handle”通用,是的。但为什么不应该呢?您的“句柄”示例之一(例如,整数索引示例)与 unique_ptr 一样通用。您不能将一种特定类型的句柄与“所有句柄”进行比较。

如果您想要一个单一的、具体的 C++ 类型(或类型模板),它是一个句柄,但实际上没有定义任何特定的处理语义,那么……我帮不了您。我认为没有人可以轻松地做到这一点。

关于c++ - 是否有适合 'ownership-in-a-package' 的 'handles' 可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878121/

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