我经常读到unique_ptr在大多数情况下比shared_ptr更受欢迎,因为unique_ptr是不可复制的并且具有移动语义; shared_ptr会因复制和引用计数而增加开销;
但是当我在某些情况下测试unique_ptr时,它看起来比它的对手明显更慢(在访问中)
例如,在gcc 4.5下:
编辑:打印方法实际上不打印任何内容
#include <iostream>
#include <string>
#include <memory>
#include <chrono>
#include <vector>
class Print{
public:
void print(){}
};
void test()
{
typedef vector<shared_ptr<Print>> sh_vec;
typedef vector<unique_ptr<Print>> u_vec;
sh_vec shvec;
u_vec uvec;
//can't use initializer_list with unique_ptr
for (int var = 0; var < 100; ++var) {
shared_ptr<Print> p(new Print());
shvec.push_back(p);
unique_ptr<Print> p1(new Print());
uvec.push_back(move(p1));
}
//-------------test shared_ptr-------------------------
auto time_sh_1 = std::chrono::system_clock::now();
for (auto var = 0; var < 1000; ++var)
{
for(auto it …Run Code Online (Sandbox Code Playgroud) 我的阅读std::unique_ptr使我确信它(以及其他智能指针)绝对是项目内部指针的最佳选择(特别是在优化编译器可以从std :: unique_ptr中删除所有运行时成本之后?),但我是还不确定在界面上做什么.我不完全了解各种C++ ABI是如何工作的,所以如果这是一个愚蠢的问题请耐心等待,但是可以使用或返回指针,具有指针成员的类/结构等的函数被替换为使用的东西unique_ptr(也许使用unique_ptrrefs?)而不需要重新编译?C代码可以在unique_ptr没有复杂的情况下与C++接口交互吗?