Dor*_*mon 3 c++ pointers shared-ptr c++11
刚刚开始使用共享指针并尝试了这样的示例程序:
int x = 10;
shared_ptr<int> ptr = make_shared<int>(x);
*ptr = 11;
cout<< x << " " << *ptr;
Run Code Online (Sandbox Code Playgroud)
结果是 10 11 这对我来说没有意义,因为 ptr 指向 x,因此 x 的值应该更改为 11。有人可以在这里解释一下吗?另外,当指向 x 的共享指针更改时,我需要更改 x 的值。请让我知道如何才能实现这一目标。提前致谢。
您误解了std::shared_ptr提供的内容。它是一种共享动态数据所有权的机制;不附加指向非动态数据的指针。
在您发布的代码中,这声明了一个简单int变量,其初始值为10
int x = 10;
Run Code Online (Sandbox Code Playgroud)
然后,这构造了一个指向 new 的共享指针,该指针与new int的唯一关系x是从后者获取的值以初始化前者。
std::shared_ptr<int> ptr = std::make_shared<int>(x);
Run Code Online (Sandbox Code Playgroud)
换句话说,对于这段代码中的所有意图,上面等价于:
std::shared_ptr<int> ptr = std::make_shared<int>(10);
Run Code Online (Sandbox Code Playgroud)
如果您希望代码中的一堆指针x通过地址进行引用,请首先问自己为什么,然后问自己为什么不只使用引用。IE
int x = 10;
// somewhere else
int &ref = x;
ref = 42; // will change x
Run Code Online (Sandbox Code Playgroud)
如果您真正想要的是具有所有权引用计数和适当的处置机制的共享状态,那么您可能需要:
std::shared_ptr<int> x = std::make_shared<int>(10);
// somewhere else
std::shared_ptr<int> ptr = x;
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,有两个对动态的 引用int:共享指针x和共享指针ptr。双方对这种动态拥有平等和共同的所有权int。当其中一个被销毁时,资源仍然存在,因为它仍然被剩余的共享指针引用。当最后一个未完成的引用被销毁时,动态也随之消失int。
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |