我知道
unique_ptr
使智能指针拥有资源,因此它不允许多个指针指向同一资源。
但是为什么允许使用
.get()
创建该智能指针的原始指针,然后将其传递给函数呢?
最后你有两个拥有资源所有权的指针并且能够改变它的值?这将违反 unique_ptr 智能 ptr 独占资源的规则。
在下面的示例中,我编写了一个简单的程序来更改 smrt 指针
smrtPtr
指向的值。
例如:
#include <iostream>
#include <memory>
#include <utility> //move semantics
void changeValue(int* ptr)
{
if (!ptr) //check if pointer is null
return;
*ptr = 17; //change value to 17
}
int main()
{
auto smrtPtr{ std::make_unique<int>(5) };
changeValue(smrtPtr.get()); //creates a raw pointer of smrtPtr
if (smrtPtr) //if it does contain resource
std::cout << *smrtPtr;
return 0;
}
非常感谢
您的整个问题是基于对智能指针功能的混淆:
“因此它不允许多个指针指向同一资源。”
它不做这样的事情。智能指针决定谁拥有资源,而不是谁可以查看资源。
所有者的责任只是在正确的时间删除资源。这意味着在其他事情完成读取它之前不要删除它。
唯一的指针意味着它是唯一负责删除的东西。共享指针意味着最后一个共享指针负责删除。
这些都不会影响访问资源的能力。