#include <iostream>
#include <memory>
#include <utility> // std::move
void fun1(double* p) {
std::cout << *p << std::endl;
return;
}
void fun2(std::unique_ptr<double>* p) {
std::cout << *p->get() << std::endl;
return;
}
void fun3(std::unique_ptr<double>& p) {
std::cout << *p.get() << std::endl;
return;
}
void fun4(std::unique_ptr<double> p) {
std::cout << *p.get() << std::endl;
return;
}
int main() {
std::unique_ptr<double> p(new double(3.14));
fun1(p.get());
fun2(&p);
fun3(p);
std::unique_ptr<double> p2(p.release());
p2.reset(new double(1.0));
fun4(std::move(p2));
return 0;
}
细节待补充,只展示常规使用方法。
(原文在知乎,源忘了,我调整了代码,如果作者看到了,提醒我)