大家好,我当前正在使用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);

    }
}

而且我还需要实例化另一个类(class),
这是类(class):
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_);

最佳答案

没有,应为MessageField(identityFF_,fieldFF_);

当取消引用智能指针时,您将获得原始对象。因此,如果执行MessageField(*identityFF_,*fieldFF_);,则基本上是将FieldIdentityCFieldC传递给构造函数,而后者又将尝试将它们转换为智能指针。因此,您将拥有2个引用相同对象的不同智能指针。

关于c++ - 如何使用智能指针实例化对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10296544/

10-13 08:34