c++ 11中unique_ptr的延迟初始化
Lazy initialization of unique_ptr in C++11
我在c++11 (gcc 4.8.2)中开发c++项目。最近我发现unique_ptr
对我很有用。不幸的是,我不能在我的环境中使用std::make_unique
函数。所以我尝试用std::move
来延迟初始化unique_ptr
。
实际上,下面的代码工作,我对自己没有信心。你能给出一些更好的方法来初始化unique_ptr
吗?我觉得我的初始化有点多余。
class AppData {
public:
AppData(int id):_id(id){};
int _id;
void print() { std::cout << "id is " << _id << std::endl; };
};
class Test {
public:
Test(){};
~Test(){};
void test();
std::unique_ptr<AppData> p_data;
};
void Test::test() {
// I am concerned with this part
std::unique_ptr<AppData> p(new AppData(3));
p_data = std::move(p);
p_data->print();
}
int main() {
Test t;
t.test();
return 0;
}
你可以更容易地做到
p_data.reset(new AppData(3));
而不是通过创建新变量的额外步骤来移动它。reset
将释放被拥有对象的所有权(如果有的话)并释放它,然后获得参数的所有权。
但是make_unique
很容易实现
要清楚,它将使您的Test::test
函数:
void Test::test() {
p_data.reset(new AppData(3));
p_data->print();
}
相关文章:
- 模板化类中静态成员的延迟初始化
- 我的子类的属性是延迟初始化的
- 在声明或实现中延迟初始化C++单一实例
- 使用 lambda 和可变参数模板延迟初始化对象 - 任意传递值
- C++11:对延迟初始化进行安全的双重检查锁定.可能的
- 本地静态对象的非延迟初始化
- 私有类成员延迟初始化的最佳做法
- 无锁代码中的延迟初始化
- 模板和延迟初始化
- 带有转发的延迟初始化
- 有没有一种方法可以延迟初始化类的静态子对象
- 堆栈对象的延迟初始化
- c++类成员和延迟初始化
- 延迟初始化缓存..我如何使它线程安全
- 延迟初始化
- 延迟初始化要初始化的对象
- 如何实现RAII +延迟初始化
- singleton的延迟初始化问题
- c++ 11中unique_ptr的延迟初始化
- std::unique_ptr的延迟初始化