shared_ptr 未更改对象(Visual studio 2012)
shared_ptr not changing object (Visual studio 2012)
我有一个非常奇怪的问题。我无法用 shared_ptr.
修改我指向的对象
示例代码:
#include<memory>
#include<iostream>
using namespace std;
class foo
{
public:
int asd;
foo(){}
~foo(){}
};
void d(shared_ptr<foo> c)
{
c->asd = 3;
}
void main()
{
foo a;
a.asd = 5;
d(make_shared<foo>(a));
cout<<a.asd; //asd is still 5
}
据我所知,您可以使用“->”运算符访问 shared_ptr 指向的对象,那么我在这里做错了什么?如何通过共享指针更改 class 中的 asd 变量?
// create a temporary object by copying a
// the shared pointer you pass to d function actually points to this temporary object
d(make_shared<foo>(a));
// allocate and store foo object in shared_ptr instead
auto p_a(make_shared<foo>());
p_a->asd = 3;
d(p_a);
... so what am I doing wrong here?
来自 cppreference on std::make_shared
[强调 我的]:
template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );
Constructs an object of type T
and wraps it in a std::shared_ptr
using args
as the parameter list for the constructor of T
.
在你的例子中,你提供了一个 foo
的实例作为 std::make_shared
的参数,它将在 构造一个 类型的新对象时使用=16=];即,使用 foo
(foo(const foo&)
) 的默认提供的副本 CTOR。这个新对象将是一个临时对象,仅在调用 d(...)
.
时有效
我有一个非常奇怪的问题。我无法用 shared_ptr.
修改我指向的对象示例代码:
#include<memory>
#include<iostream>
using namespace std;
class foo
{
public:
int asd;
foo(){}
~foo(){}
};
void d(shared_ptr<foo> c)
{
c->asd = 3;
}
void main()
{
foo a;
a.asd = 5;
d(make_shared<foo>(a));
cout<<a.asd; //asd is still 5
}
据我所知,您可以使用“->”运算符访问 shared_ptr 指向的对象,那么我在这里做错了什么?如何通过共享指针更改 class 中的 asd 变量?
// create a temporary object by copying a
// the shared pointer you pass to d function actually points to this temporary object
d(make_shared<foo>(a));
// allocate and store foo object in shared_ptr instead
auto p_a(make_shared<foo>());
p_a->asd = 3;
d(p_a);
... so what am I doing wrong here?
来自 cppreference on std::make_shared
[强调 我的]:
template< class T, class... Args > shared_ptr<T> make_shared( Args&&... args );
Constructs an object of type
T
and wraps it in astd::shared_ptr
usingargs
as the parameter list for the constructor ofT
.
在你的例子中,你提供了一个 foo
的实例作为 std::make_shared
的参数,它将在 构造一个 类型的新对象时使用=16=];即,使用 foo
(foo(const foo&)
) 的默认提供的副本 CTOR。这个新对象将是一个临时对象,仅在调用 d(...)
.