c – 如何为成员创建shared_ptr?

前端之家收集整理的这篇文章主要介绍了c – 如何为成员创建shared_ptr?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定我是否因为文档错误或头痛而遭受更多痛苦,所以…

我想要做的是创建一个shared_ptr,它与另一个共享所有权,但引用对象的成员而不是整个对象.简单的例子,起点……

struct s
{
  int a,b;
};

shared_ptr<s> s1 (new s);  //  pointing to whole object

en.cppreference.com开始,shared_ptr的构造函数(8)是……

template< class Y >
shared_ptr( const shared_ptr<Y>& r,T *ptr );

该描述提到“构造一个shared_ptr,它与r共享所有权信息,但是保存一个不相关且不受管理的指针ptr ……例如在ptr是由r管理的对象的成员的典型用例中”.

那么……在构造函数中,T是否意外地错过了模板,或者我错过了什么?事实上,Y看起来对我来说也是错的,所以通常只是构造函数描述正确吗?

我希望我能做的就是这样……

shared_ptr<int> s2 (s1,&(s1.get ()->a));

s2指向成员a(一个int),但与s1共享整个对象的所有权.

这样理智吗?

解决方法

T参数是shared_ptr本身的模板参数,而Y参数是该特定shared_ptr构造函数的模板参数.像这样的东西:
template< class T >
class shared_ptr
{
     template< class Y >
     shared_ptr( const shared_ptr<Y>& r,T *ptr );
}

至于您发布的示例代码,这对我来说很好.

猜你在找的C&C++相关文章