为什么看起来boost::shared_ptr的构建速度越来越慢?

为什么看起来boost::shared_ptr的构建速度越来越慢?,boost,shared-ptr,smart-pointers,Boost,Shared Ptr,Smart Pointers,我对boost shared_ptr有问题。循环中智能指针的初始化时间在第一次迭代后增加。 第一次迭代需要40毫秒。每隔一次迭代大约需要400毫秒。 我不知道为什么会这样。我检查过了,没有内存泄漏,所有的析构函数都被调用了。有人能解决这个问题吗 然而,当我使用boost::ptr_向量时,时间并没有增加(只在调试版本中增加) 见示例: class A; typedef boost::shared_ptr<A> A_ptr; class A { public: A(){} A_

我对boost shared_ptr有问题。循环中智能指针的初始化时间在第一次迭代后增加。 第一次迭代需要40毫秒。每隔一次迭代大约需要400毫秒。 我不知道为什么会这样。我检查过了,没有内存泄漏,所有的析构函数都被调用了。有人能解决这个问题吗

然而,当我使用boost::ptr_向量时,时间并没有增加(只在调试版本中增加)

见示例:

class A;
typedef boost::shared_ptr<A> A_ptr;
class A
{
public:
  A(){}
  A_ptr add(A* new_A)
  {
    A_ptr new_A_ptr( new_A );
    children.push_back(new_A_ptr);
    return new_A_ptr;
  }
  ~A(){}
  vector<A_ptr> children;
};

void test()
{
   A_ptr root_ptr( new A() );
   for (int k=0; k<200; k++)
   {
        A_ptr sub_ptr = root_ptr->add( new A() );
        for (int l=0; l<100; l++) sub_ptr->add( new A() );
   }
};

int main()
{
  for(int i=0; i<10; i++)
  {
    unsigned t = clock();    
    test();
    std::cout<<"elapsed: "<<clock()-t<<std::endl;
  }

  return 0;
}
A类;
typedef boost::shared_ptr A_ptr;
甲级
{
公众:
A(){}
A_ptr add(A*新的_A)
{
A_ptr new_A_ptr(new_A);
儿童。推回(新的推回);
返回新的\u A \u ptr;
}
~A(){}
媒介儿童;
};
无效测试()
{
A_ptr root_ptr(新的A());
for(intk=0;kadd(新的A());
对于(int l=0;ladd(新的A());
}
};
int main()
{
for(int i=0;i
clock()
是一个糟糕的时间计数器。你几乎不能用它来计算毫秒数。如果你在windows上,请使用monotic时钟或get time of day。或QueryPerformanceCounter

接下来,该测试不是测试共享的\u ptr构造时间,它主要测量对象
A
分配时间。在
共享的\u ptr
本身中也有一个用于存储ref计数的分配


使用
make_shared
函数(而不是
shared_ptr(新A)
)将所有这一切加速约2倍。

您能否澄清一下:“循环中智能指针的初始化在第一次迭代后增加。”?什么初始化?参考计数?什么?循环中的第一次迭代的时间约为40毫秒,第二次迭代的时间约为400毫秒CI刚刚进行了测试,我不明白为什么时间会增加。