如何使用智能指针实例化对象
how to instantiate an object using smart pointers
大家好,我目前正在使用 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(或 FieldCPtr),但它是一个增强智能指针,所以如果我错了,请纠正我,但我想也许我可以这样做:
FieldIdentityCPtr identityFF_= new FieldIdentity(nameFld,,idFld);
FieldCPtr fieldFF_ = new Field(typeFld,false);
MessageField(*identityFF_,*fieldFF_);
不,它应该是MessageField(identityFF_,fieldFF_);
.
取消引用智能指针时,将返回原始对象。因此,如果您执行MessageField(*identityFF_,*fieldFF_);
,则基本上是将FieldIdentityC
和FieldC
传递给构造函数,构造函数又会尝试将它们转换为智能指针。因此,您将有 2 个不同的智能指针引用相同的对象。
相关文章:
- 为什么我不能引用指向实例化对象的函数的指针?
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 实例化对象并调用方法,使用单行语法在 C# 或 C++ 中返回值?
- 为什么我不能更改实例化对象内部的向量?
- 为共享指针C++单独实例化对象
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- C++:我可以在 void 函数中实例化对象吗?
- 为什么当我在构造函数中创建线程时,实例化对象和对象的指针的行为不同
- 是否可以由于以下原因在堆中实例化对象
- 一类应管理其实例化对象
- 实例化对象时如何修复分段故障错误
- QML实例化C 对象.我如何访问他们的方法
- 如何在 c++ 中使用枚举参数实例化对象
- C 实例化对象,在没有指针的情况下,其他类构造函数中没有默认构造函数
- 用push_back()实例化对象时,如何将指针传递给对象的构造函数
- 我如何在C 类的内部实例化对象
- 两者之间的最佳方法是什么:实例化对象或使用指针
- 从标头中的类实例化对象
- 我能否获得一个C++编译器在编译时实例化对象
- 访问不带实例化对象的非静态成员函数