// 初级
void test_unique_ptr_basic()
{
// 错误1
//std::unique_ptr a;
// 错误2
//std::unique_ptr a{ new int };
// 未分配内存
std::unique_ptr<int> a;
if (a)
{
std::cout << "a is allocated: " << *a << std::endl;
}
else
{
std::cout << "a is nullptr, not yet allocated" <<std::endl;
}
}
void test_unique_ptr_okay()
{
// 分配内存,但未初始化
std::unique_ptr<int> a{ new int };
if (a)
{
std::cout << "a is allocated, its value: " << *a << std::endl;
}
else
{
std::cout << "a is not yet allocated." << std::endl;
}
}
void test_unique_ptr_whit_initial_value()
{
// 分配内存,并初始化
std::unique_ptr<int> a{ new int{} };
if (a)
{
std::cout << "a is allocated, its value: " << *a << std::endl;
}
else
{
std::cout << "a is not yet allocated." << std::endl;
}
}
2.步入正题RAII。
void test_unique_ptr_with_raii_one()
{
int value = 5;
auto my_deleter = [](auto p) // 这里 p 类型为 int* (auto 可以替换成int*)
{
std::cout << "not delete p" << std::endl;
};
std::unique_ptr<int> a{ &value, my_deleter };
}