【发布时间】:2021-01-13 18:18:22
【问题描述】:
再次发帖, 存储在A类中的唯一指针,需要在B类中访问而不使用共享ptr或引用吗? (即)该指针的所有者应仅保留在 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();
}
【问题讨论】:
-
您可以通过
.get()函数从unique_ptr获取底层指针。所以你可以传递一个非拥有的指针。此外,建议使用std::make_unique创建unique_ptr。但是对于您想要实现的目标,这个问题并不十分清楚 -
好的,谢谢。这将起作用,类似于@Remy Lebeau 的建议。
标签: c++ singleton c++17 smart-pointers unique-ptr