gpt4 book ai didi

c++ - 从共享指针的取消引用值中获取共享指针

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:09 27 4
gpt4 key购买 nike

想象一下有一个共享指针的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com