5 c++
表达"资源所有权"是什么意思?是否拥有指针的所有权?例如,在这个答案中,表达式被用于"POD不能表达指针或资源的所有权".涉及动态内存管理的类,它们表示指针或资源的所有权吗?
Rei*_*ica 13
我不认为有一个普遍接受的,100%准确且始终适用的定义,但我在C++(以及一般编程)环境中遇到的最有用的所有权定义是清理的责任.也就是说,资源的所有者是负责正确清理该资源的人.
"资源"和"清理"的含义取决于具体情况.当资源是通过动态分配的内存时new
,清理就是调用delete
.当资源是文件描述符时,清理就是关闭它.等等.
这就是普通旧数据无法表达所有权的原因:POD类必须具有无操作析构函数,因此无法执行任何自动清理.
比较int *
,std::unique_ptr<int>
和std::shared_ptr<int>
.所有这些类型都是"指向"的指针int
.但第一个并不代表所有权 - 你可以用它做任何你想做的事情,你可以愉快地使用它导致内存泄漏或双重释放.
std::unique_ptr<int>
代表最简单的所有权形式:它说"我是资源的唯一所有者(=动态分配int
).当我被销毁时,我会正确清理它." 它旨在提供一种违反所有权语义的理智方式(例如,它是不可复制的).
std::shared_ptr<int>
代表了一种更为复杂的所有权形式:"我是集体负责资源的一群朋友之一.我们最后一个被摧毁的人将清理它." 同样,在你违反语义之前,还有一些可以跳过的箍.
归档时间: |
|
查看次数: |
480 次 |
最近记录: |