gpt4 book ai didi

c++ - 什么是资源或指针的所有权?

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

表达“资源的所有权”是什么意思?它与拥有指针的所有权一样吗?例如在 this answer ,使用了表达式“PODs cannot express ownership of pointers or resources”。涉及动态内存管理的类,它们是否表示指针或资源的所有权?

最佳答案

我不认为有一个普遍接受的、100% 准确且始终适用的定义,但是我在 C++ 上下文中遇到过的最有用的所有权定义(以及在general) 负责清理。也就是说,资源的所有者是负责正确清理该资源的人。

“资源”和“清理”的含义取决于上下文。当资源是通过 new 动态分配的内存时,清理正在调用 delete .当资源是文件描述符时,清理就是关闭它。等等。

这就是普通旧数据无法表达所有权的原因:POD 类必须具有空操作析构函数,因此无法执行任何自动清理。

比较 int * , std::unique_ptr<int> , 和 std::shared_ptr<int> .所有这些类型都是“指向 int 的指针”。但是第一个并不代表所有权——您可以用它做任何您想做的事情,并且您可以愉快地以导致内存泄漏或双重释放的方式使用它。

std::unique_ptr<int>代表最简单的所有权形式:它说“我是资源的唯一所有者(=动态分配的 int )。当我被销毁时,我会正确地清理它。”它旨在不提供违反所有权语义的合理方式(例如,它是不可复制的)。

std::shared_ptr<int>代表一种更复杂的所有权形式:“我是一群共同负责资源的 friend 之一。我们中最后一个被摧毁的人将清理它。”同样,在违反语义之前,需要跳过几个环节。

关于c++ - 什么是资源或指针的所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024982/

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