C++ std::shared_ptr operator=更改对象,而不是指针值?
在下面的小程序中,我希望能够通过更改C++ std::shared_ptr operator=更改对象,而不是指针值?,c++,C++,在下面的小程序中,我希望能够通过更改s的值来更改M中的值。但显然我做不到。一种可行的方法是更改原始指针,但这并不安全: #include <iostream> #include <memory> class M{ public: std::shared_ptr<int> t; }; std::shared_ptr<int> s; int main() { M m; m.t = s; s = std::make_shared<
s
的值来更改M
中的值。但显然我做不到。一种可行的方法是更改原始指针,但这并不安全:
#include <iostream>
#include <memory>
class M{
public:
std::shared_ptr<int> t;
};
std::shared_ptr<int> s;
int main() {
M m;
m.t = s;
s = std::make_shared<int>(5);
std::cout << m.t << std::endl; //prints 0
}
#包括
#包括
M类{
公众:
std::共享的ptr t;
};
std::共享的ptr;
int main(){
M M;
m、 t=s;
s=标准::使_共享(5);
std::cout共享指针的整个功能是安全地传递指针,就像它只是一个原始指针一样。这意味着m.t=s
只需复制s
当前正在管理的指针,并将其存储在t
中。然后它更新其内部引用计数,以便如果s
或t
超出范围,指针将不会被删除。如果您随后更改s
指向的内容,则它不应更改t
,因为t
不知道s
。如果您希望更改s
的内容也会影响m.t
,则必须更改s
的内容。请尝试*s=5;std::您是否可以交换订单。首先执行s=std::make_shared(5);
,然后执行m.t=s;
。然后您可以执行*s=6;
或*m.t=7;
,这两种操作都会影响其他共享智能指针。