我想知道这些方式创建指针之间的区别;
// 1
ptr = shared_ptr<A>(new A);
// 2
ptr = make_shared<A>(new A);
第二次使用中也存在编译器错误
ptr = make_shared<A>(new A); // then how to use make_shared
也尝试过
ptr = make_shared<>(new A);// error: no matching function for call to ‘make_shared(A*)’
ptr = make_shared<A>();//this works fine
有一个名为A的类。它有一个整数变量a。有setter和getter方法。我尝试创建类型为A的共享指针。然后将“ a”变量设置为40。然后使用get()获取A的地址。然后重置指针。再次创建A的共享指针,并按照与上述两种制作共享指针的方法相同的过程进行测试。
error: no matching function for call to ‘A::A(A*)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
class A
{
public:
A() {}
~A() {}
int getValue() { return a; }
void setValue(int x) { a = x; }
private:
int a;
};
int main()
{
shared_ptr<A> ptr(new A);
ptr->setValue(40);
cout<<ptr.get()<<endl;
cout<<"value = "<<ptr->getValue()<<endl;
ptr.reset();
cout<<ptr.get()<<endl;
//cout<<"value = "<<ptr->getValue()<<endl;
ptr = shared_ptr<A>(new A);
ptr->setValue(40);
cout<<ptr.get()<<endl;
cout<<"value = "<<ptr->getValue()<<endl;
ptr.reset();
cout<<ptr.get()<<endl;
ptr = make_shared<A>(new A);
ptr->setValue(40);
cout<<ptr.get()<<endl;
cout<<"value = "<<ptr->getValue()<<endl;
ptr.reset();
cout<<ptr.get()<<endl;
}