大家好我当前正在使用QuickFast库,我使用boost智能指针看到了这个声明:
namespace QuickFAST{
namespace Messages{
class FieldIdentity;
typedef boost::intrusive_ptr<const FieldIdentity> FieldIdentityCPtr;
typedef boost::intrusive_ptr<FieldIdentity> FieldIdentityPtr;
void QuickFAST_Export intrusive_ptr_add_ref(const FieldIdentity * ptr);
void QuickFAST_Export intrusive_ptr_release(const FieldIdentity * ptr);
void QuickFAST_Export intrusive_ptr_add_ref(FieldIdentity * ptr);
void QuickFAST_Export intrusive_ptr_release(FieldIdentity * ptr);
}
}
我得到了另一个我需要实例化的类, 这是班级:
namespace QuickFAST{
namespace Messages{
/// @brief the representation of a field within a message.
class QuickFAST_Export MessageField
{
public:
/// @brief Construct from an identity and a typed value.
MessageField(const FieldIdentityCPtr & identity, const FieldCPtr & field)
: identity_(identity)
, field_(field)
{
}
private:
FieldIdentityCPtr identity_;
FieldCPtr field_;
};
}
}
所以我的问题是:当我需要创建一个MessageField时,我需要先准备我的FieldIdentityCPtr(resp.FieldCPtr),但它是一个boost智能指针,所以如果我错了就纠正我,但我想也许我可以做这个:
FieldIdentityCPtr identityFF_= new FieldIdentity(nameFld,,idFld);
FieldCPtr fieldFF_ = new Field(typeFld,false);
MessageField(*identityFF_,*fieldFF_);
答案 0 :(得分:1)
否,应为MessageField(identityFF_,fieldFF_);
。
取消引用智能指针时,会返回原始对象。因此,如果您执行MessageField(*identityFF_,*fieldFF_);
,则基本上将FieldIdentityC
和FieldC
传递给构造函数,而构造函数又会尝试将它们转换为智能指针。因此,您将有2个不同的智能指针引用相同的对象。