gpt4 book ai didi

c++ - 专门的 shared_ptr 转换 C++0x

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

这可能可以推广到任何模板化类,但我已经用 shared_ptr 遇到过这个问题。我有这样的类(class)系统:

class A {
protected:
// some data
}

class B : public A {
// some access functions
}

class C : public A {
// some other access functions
}

我使用这个概念是因为在我的库中我使用了一组不应向用户公开的函数,所以我将这些函数分为两个接口(interface)类。现在,我知道我可以使用一个类和 friend ,但如果需要多个类来访问这些函数,这会变得很难看。

但是,我的问题是这些类在 shared_ptr 中传递我需要保留引用计数(因为数据会被破坏)。因此我需要在这个例子中转换 shared_ptr<B>shared_ptr<C>反之亦然。是否shared_ptr如果提供了所需的功能,则允许这样的事情,如果是的话,那些是什么?构造函数?分配运算符?还是我需要更上一层楼,提出完整的建议,而不仅仅是内容?到目前为止我没有运气。

是的,如果您有更好/更简洁的方法来隐藏某些功能,我会很高兴听到,但我也希望这个问题得到回答。

最佳答案

你想要std::static_pointer_caststd::dynamic_pointer_cast , 来自 <memory> :

struct A {}; struct B : A {};

std::shared_ptr<B> p(std::make_shared<B>());
std::shared_ptr<A> q(std::static_pointer_cast<A>(p));
// now p and q **share** ownership over their pointed-to object.

关于c++ - 专门的 shared_ptr 转换 C++0x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541168/

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