裸指针即便使用了delete也有可能内存泄漏。智能指针则不会
下面的例子假定p->foo()抛出了异常就不会执行delete p从而造成内存泄漏。
值传递:
1 void pass_uo1(int value) 2 { 3 value = 9; 4 } 5 int main() 6 { 7 auto up = make_unique<int>(123); 8 pass_uo1(*up); 9 cout << *up << endl; 10 system("pause"); 11 return 0; 12 }
地址传递:
1 void pass_uo1(int *value) 2 { 3 *value = 9; 4 } 5 int main() 6 { 7 auto up = make_unique<int>(123); 8 pass_uo1(up.get()); 9 cout << *up << endl; 10 system("pause"); 11 return 0; 12 }
引用传递:
1 void pass_uo1(int& value) 2 { 3 value = 9; 4 } 5 int main() 6 { 7 auto up = make_unique<int>(123); 8 pass_uo1(*up); 9 cout << *up << endl; 10 system("pause"); 11 return 0; 12 }