在不使用引用或共享指针的情况下访问 class 中的唯一指针

access the unique pointer across the class without using reference or shared pointer

再次发帖, class A 中存储的唯一指针,需要在 class B 中访问而不使用共享指针或引用?。 (ie) 该指针的所有者应仅保留在 class A 中,并且不应共享指针的语义所有权。 func1, func2, func3 都是唯一指针被多次访问的地方。 代码片段有帮助,我是智能指针的新手。

class A
{
public:
    static A* Get();
    A();
    virtual ~A();
    std::unique_ptr<ABC> *Getter();
private:
    std::unique_ptr<ABC> uniquePointer;
}   

A.cpp

A::A() 
{
   uniquePointer = std::unique_ptr<ABC> new ABC();
}

A::Getter()
{
   return &uniquePointer; => This worked but it is not desirable.
}

b.h

#include <a.h>
class B {
private:
    func1();
    func2();
    func3();
}

B.cpp

B::func1()
{
    std::unique_ptr<ABC> *getPtrfunc1 = A::Get()->Getter();
}
B::func2()
{
    std::unique_ptr<ABC> *getPtrfunc2 = A::Get()->Getter();
}
B::func3()
{
    std::unique_ptr<ABC> *getPtrfunc3 = A::Get()->Getter();
}

the semantic ownership of the pointer should not be shared

根本不要传递对 unique_ptr 的访问权限。传递指向 unique_ptr 拥有的 ABC 的原始指针,例如:

class A
{
public:
    static A* Get();
    A();
    ABC* Getter();
private:
    std::unique_ptr<ABC> uniquePointer;
};
A::A() 
{
   uniquePointer = std::make_unique<ABC>();
}

A* A::Get()
{
    static A a;
    return &a;
}

ABC* A::Getter()
{
   return uniquePointer.get();
}
#include <a.h>

class B {
private:
    void func1();
    void func2();
    void func3();
}
void B::func1()
{
    ABC *getPtrfunc1 = A::Get()->Getter();
}

void B::func2()
{
    ABC *getPtrfunc2 = A::Get()->Getter();
}

void B::func3()
{
    ABC *getPtrfunc3 = A::Get()->Getter();
}