加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 转发一个没有类声明的shared_ptr

发布时间:2020-12-16 03:24:49 所属栏目:百科 来源:网络整理
导读:注意:我发现错误的源码实际上并不与shared_ptr相关,只是在错误消息中巧妙地伪装成这样.因此下面基本上是废话(不是答案,他们很好) – 我在使用shared_ptr(boost的时候)有一些麻烦,我需要简单地将指针转发到另一个函数.使用本地指针,intervening函数不需要访
注意:我发现错误的源码实际上并不与shared_ptr相关,只是在错误消息中巧妙地伪装成这样.因此下面基本上是废话(不是答案,他们很好)

我在使用shared_ptr(boost的时候)有一些麻烦,我需要简单地将指针转发到另一个函数.使用本地指针,intervening函数不需要访问类的定义,但是使用smart_ptr它似乎是.有什么办法可以避免吗?

例如,给定目标函数:

void func( shared_ptr<SomeClass> const & obj )

常数&照顾部分问题,但是说我们有一个getter类可以获取其他类的对象,如:

shared_ptr<SomeClass> someClassInstance();

这里是我想简单地组合参数并转发到目标函数的地方:

func( someClassInstance() );

使用一个简单的指针,代码中的这一点可以简单地使用SomeClass的前向声明,但是使用smart_ptr需要具有完整的定义(可能是因为smart_ptr可能需要删除该类).

现在,如果someClassInstance要返回一个const&这个问题实际上会消失,因为插入的代码不会复制任何对象.但是,为了线程安全的原因,getter函数必须返回副本.

有没有我可以实现这种类型的智能指针参数转发,而不需要类定义?也就是说,在这种情况下,我可以像传统的指针一样使用智能指针.

更新:写一个小测试的答案是正确的,前向声明是足够的.然而,海湾合作委员会仍然抱怨一种情况.我将不得不弄清楚导致它失败的原因(在这种特殊情况下).

现在关闭这个问题,还是什么?

解决方法

每次提到shared_ptr< T>至少需要一个T的前向声明.

只有使用unary shared_ptr :: operator *和shared_ptr :: operator-&gt,才需要完整的事情.在引擎盖下,shared_ptr使用compiletime和runtime-polymorphism的混合,使之成为可能.另见this question了解“魔法”.

例:

// frob.h
#ifndef FROB_H
#define FROB_H

#include <shared_ptr>

class Foo;
void grind (std::shared_ptr<Foo>);

#endif

请注意,传递shared_ptr的规范方法是按值(即删除const&).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读