如何解决在不使用引用或共享指针的情况下访问整个类的唯一指针
再次发帖, 存储在 A 类中的唯一指针,需要在 B 类中访问而不使用共享 ptr 或引用吗?。 (ie) 该指针的所有者应仅保留在 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();
}
解决方法
不应共享指针的语义所有权
根本不要传递对 unique_ptr
的访问权限。传递指向 ABC
拥有的 unique_ptr
的原始指针,例如:
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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。