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
is very easy to implement
明确地说,这将使您的 Test::test
函数:
void Test::test() {
p_data.reset(new AppData(3));
p_data->print();
}
我正在用 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
is very easy to implement
明确地说,这将使您的 Test::test
函数:
void Test::test() {
p_data.reset(new AppData(3));
p_data->print();
}