我不确定我是否因为文档错误或头痛而遭受更多痛苦,所以…
我想要做的是创建一个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共享整个对象的所有权.
这样理智吗?
解决方法
@H_403_25@ T参数是shared_ptr本身的模板参数,而Y参数是该特定shared_ptr构造函数的模板参数.像这样的东西:template< class T > class shared_ptr { template< class Y > shared_ptr( const shared_ptr<Y>& r,T *ptr ); }
至于您发布的示例代码,这对我来说很好.