gcs*_*osh 6 c++ copy-constructor ownership unique-ptr
我需要编写一个复制构造函数,它还传输要复制的对象的unique_ptr成员的所有权.情况如下:
class C{
   // C class stuff       
};
class A{
public:
    public A();
    public A(const A& a);
private:
    std::unique_ptr<C> c_;
}
class B{
public:
    B(const A& b) : a_(a){}
private:
     A a_;
};
我该如何实现复制构造函数A?
我想你的意图或方法是错误的.
复制构造函数用于创建参数的副本,但由于unique_ptr维护了独占所有权,因此无法复制它.实际上,您可以创建unique_ptr成员mutable,然后将它指向的资源移动到复制构造函数中,但这绝对是疯了(这就是做什么std::auto_ptr,这就是为什么它已被弃用).
因此,您需要:
unique_ptr到shared_ptr,但仅当C实际上是要共享时还有第三个选项,即在A的复制构造函数中创建unique_ptr所指向的对象的副本,即:
A::A(const A& a) : c_(std::unique_ptr<C>(a.c_ ? new C(*a.c_) : nullptr)) {
}
| 归档时间: | 
 | 
| 查看次数: | 3021 次 | 
| 最近记录: |