こんにちは、私は現在 QuickFast ライブラリを使用しています。ブースト スマート ポインターを使用したこの宣言を見ました。
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 ) を準備する必要がありますが、これはブースト スマート ポインターなので、間違っている場合は修正してください。
FieldIdentityCPtr identityFF_= new FieldIdentity(nameFld,,idFld);
FieldCPtr fieldFF_ = new Field(typeFld,false);
MessageField(*identityFF_,*fieldFF_);