将私有唯一指针与公共方法交换

Swapping private unique pointers with a public method

提问人:ajsdiubfaoishd 提问时间:7/23/2023 最后编辑:ajsdiubfaoishd 更新时间:7/23/2023 访问量:50

问:

我有一个带有私有 unique_ptr 成员的类,我想公开一个公共交换函数,该函数会将其unique_ptr成员的所有权与提供的其他成员的所有权交换。我该怎么做?

class A{ // a is polymorphic type, derivatives A1, A2, etc
    private:
        unique_ptr<B> b;
    public:
        void swap_b(A??? other) {
            A.b.swap_c(other.b) // I want to swap A.b.c with other.b.c
        }
};

class B{ // b is polymorphic type
    private:
        unique_ptr<C> c; // c is also polymorphic type
    public:
        void swap_C(B??? other) {
            B.c.swap(other.c)
        }
};

int main() {
    unique_ptr<A> alphaOne = make_unique<A1>(...);
    unique_ptr<A> alphaTwo = make_unique<A2>(...);
    alphaOne.swap(alphaTwo); // the unique_ptr alphaOne.b.c should swap ownership with alphaTwo.b.c
}

我有一个 ,我想从中获取任意两个元素并调用 swap 来交换它们的 b.c unique_ptrs。我怎样才能做到这一点?vector<unique_ptr<A>>

C++ 内存 Smart-Pointers RAII

评论

1赞 Chris Dodd 7/23/2023
替换 with 并去掉 and 后缀?不清楚你在问什么。???&_b_C

答:

2赞 Quimby 7/23/2023 #1

我不确定我是否遗漏了什么,但一个简单的参考就足够了:

#include <memory>
using namespace std;

class C {};

class B {
   private:
    unique_ptr<C> c;

   public:
    void swap(B& other){ c.swap(other.c); }
};

class A {
   private:
    unique_ptr<B> b;

   public:
    virtual ~A() = default; // See note 1.

    void swap(A& other){ b.swap(other.b); }
};

class A1:public A{};
class A2:public A{};


int main() {
    unique_ptr<A> alphaOne = make_unique<A1>();
    unique_ptr<A> alphaTwo = make_unique<A2>();
    alphaOne.swap(alphaTwo);
}
  1. 基类的析构函数应该是通过基类指针销毁实例时。virtual

评论

1赞 Quimby 7/23/2023
@TedLyngmo很好,谢谢。