想象一下有一个共享指针的 vector
typedef vector< shared_ptr< classA > > PointerVector;
还有一个 B 类,它也有一个共享指针 vector 作为成员,以及一个将已经取消引用的共享指针推回到这个 vector 中的方法。
ClassB
{
public:
void add(classA &ref);
private:
PointerVector vector;
}
假设 main 为 add 函数提供了一个取消引用的 shared_ptr
主要是:
shared_ptr< classA > sharedptr ( new classA );
ClassA &ref = *sharedptr;
ClassB B;
B.add(ref);
有没有办法实现 add 函数来接受一个解除引用的共享指针并将其转换为初始共享指针?然后将其推回到矩阵中?
这就是我想要做的:
void ClassB::add(classA &ref) {
shared_ptr< classA > ptr = &ref;
vector.push_back( ptr );
}
注意 1: 当将 classA 添加到 vector 时,我希望共享指针计数增加 1。我不需要创建另一个共享指针,我想“找到”对象以前拥有的共享指针。
注意 2:我不能使用 make_shared 因为我目前在 tr1
最佳答案
通常您不能只是“查找” 指向对象的指针,因为没有任何东西可以跟踪是否指向特定对象。您应该自己设计这种机制或使用标准库提供的机制:enable_shared_from_this
.
第 1 步:从 std::enable_shared_from_this
派生您的类并提供一个成员函数来获取指针:
#include <memory>
struct ClassA: std::enable_shared_from_this<ClassA>
{
std::shared_ptr<ClassA> get_pointer()
{
return shared_from_this();
}
//...
};
第 2 步:确保要获取指针的所有对象都由 shared_ptr
管理:
std::shared_ptr<ClassA> original_ptr(new ClassA);
第 3 步:每当您想要获取指向对象的共享指针时,调用第 1 步中定义的函数:
void ClassB::add(classA& ref) {
shared_ptr<classA> ptr = ref.get_pointer();
vector.push_back( ptr );
}
关于c++ - 从共享指针的取消引用值中获取共享指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46382838/