初始化 boost::shared_ptr <A>类型变量的正确方法
correct way to initialize a variable of the type boost::shared_ptr<A>
我不确定我做得是否正确,因此问了这个问题
是boost::shared_ptr
指针的reset
函数,可用于初始化类型为boost::shared_ptr<A>
的变量。以下是我在代码中完成的wat示例代码:
struct A
{
};
struct B
{
int x;
std::string ss;
boost::shared_ptr<A> A_ref;
};
setdata(struct B *b)
{
b->x=10;
b->ss="hello";
b->A_ref.reset(new A()); // initializing A_ref variable using reset function.
}
上述初始化CCD_ 4变量的方式是好的还是有任何其他效果。
谢谢,
您可以使用构造函数和/或setter函数来避免独立函数:
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
struct A {};
struct B
{
int x;
std::string ss;
boost::shared_ptr<A> A_ref;
B()
: x(10), ss("hello"), A_ref(boost::make_shared<A>())
{}
void set();
};
void B::set() {
x=10;
ss="hello";
A_ref = boost::make_shared<A>();
}
注意:make_shared更可取(见@sehe的回答(。
附带说明:您可以用setdata(B *b)
替换setdata(struct B *b)
(此处省略不必要的结构(
是的,这是重置共享指针的预期方法。
请参阅http://en.cppreference.com/w/cpp/memory/shared_ptr/reset
还支持赋值,并且具有类似的语义。
b->A_ref = boost::make_shared<A>();
Make shared通常是首选,因为
- 它可以帮助在具有多个共享指针参数的函数调用中获得异常安全性
- 它可以导致参考计数的更有效的内存表示
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 如何调用指针类型的方法(禁用多态性)?
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 通过模板函数对未知类型调用方法
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- C++ 模板:重载时找不到基类类型参数方法
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 返回不同类型变量的单个 get 方法
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++中另一种计算双类型变量的方法
- 初始化 boost::shared_ptr <A>类型变量的正确方法
- 找出函数中变量分配类型的方法