繁体   English   中英

使用智能指针的好处?

[英]The benefits of using a smart pointer?

以这个为例:

#include <memory>
#include <iostream>

int add(int a, int b) {
    return a+b;
}

std::unique_ptr<int> addp(int a, int b) {
    std::unique_ptr<int> ip(new int(a + b));
    return ip;
}

int main(int argc, char const* argv[])
{
    std::cout << add(3, 5) << std::endl;
    std::cout << *(addp(3, 5)) << std::endl;
    return 0;
}

函数addp能否改善性能,换句话说, 它是否完全避免了数据复制? 我怀疑结果a+b已进入堆栈,然后以任何方式复制到堆中。

您根本不需要任何指针,因此智能指针并没有改进。

通过将资源所有权信息(例如,哪个部分负责释放资源)附加到变量,智能指针对指针驱动的代码进行了改进。

使用智能指针的好处是在需要一个指针的情况下不必使用“裸”指针。

因此,这与性能无关:它与程序员对内存管理意识的需求有关,内存管理增加了软件的复杂性,并可能增加了错误和内存泄漏的数量。

如您所说,如果想要避免将数据复制到该函数,则可以使用pass-by-refence ,以便该函数接收对该对象的引用 ,而不是对象的副本。 另外,请注意,这样做后,对函数内部参数所做的任何更改将应用于原始调用者。 为了避免这种情况,可以使用const

不,addp可能会慢很多,因为它需要堆分配。

多亏了返回值优化(RVO),编译器仍然可以从原始add函数中优化副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM