裸指针即便使用了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 }

 

posted on 2022-11-22 14:37  小凉拖  阅读(18)  评论(0编辑  收藏  举报