如何在C ++中正确使用共享指针

时间:2019-11-14 12:55:13

标签: c++ dictionary stl

我想知道这些方式创建指针之间的区别;

// 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;
}

0 个答案:

没有答案