0
我对boost shared_ptr有问题。循环中智能指针的初始化时间在第一次迭代后增加。 第一次迭代需要40毫秒。每隔一次迭代大约需要400毫秒。 我不知道为什么会发生。我查了一下,没有内存泄漏,所有的析构函数都被调用。有没有人有这种情况下的解决方案?为什么它看起来像boost :: shared_ptr结构变得越来越慢?
PS。但是,当我使用boost :: ptr_vector时,时间不会增加(但仅在调试版本:))。
见例如:
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;
}
的一个因素,你可以澄清:“循环中的智能指针的初始化是在第一次迭代后增加了。” ??什么初始化?参考计数?什么? – 2011-04-19 08:22:08
循环中的第一次迭代时间约为40毫秒,其他时间约为400毫秒 – user713782 2011-04-19 08:28:15
您想做什么? – 2011-04-19 08:32:31