使用TR1库增加shared_ptr问题

时间:2013-10-29 08:51:36

标签: boost shared-ptr tr1 c++03

class MyClass{
public:
  MyClass() {}
  virtual ~MyClass() {}
};

extern "C" int foo(int tryNumber)
{
    std::tr1::shared_ptr<MyClass> myClass(new MyClass());
    std::cout << "Object has been created " << tryNumber << << std::endl;
    return 0;
}

然后在我的程序中的某处写道:

for (int i = 0; i < 10000; ++i){
    foo(i);
}

有事实:

1)gcc 4.0.1,我还不能更新它们。所以当我实现std::tr1::shared_ptr时,我看到编译器使用boost / shared_ptr.hpp(boost 1.33.1)

2)好吧,该程序使用了许多线程,我甚至不知道他们是如何工作的以及他们完全做了什么(我工作中的大项目),但我知道,我不知道使用任何可能导致此行为的共享变量或其他内容

3)有时只会打印出来:

对象已创建0

对象已创建1

...

对象已创建9999

一切都很好

有时会打印0-1-2-3-4(或更多)行,然后停止。此外 - 我知道,对象已经创建,但函数没有返回值,程序只是冻结,当我尝试使用gdb附加到程序并键入&#34;其中&#34; - 我明白了:

__kernel_vsyscall()

中的

0)0xb7fd8430

1)来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的0xb7d9bece

2)来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500

3)0xbfbefab8在? ()

4)0x00000000 in ?? ()

或者这个:

__kernel_vsyscall()

中的

0)0xb7fd8430

1)来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的0xb7d9bece

2)来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500

..不知道这里有什么,我只看到&#34; ..在??? ()&#34;

10)..在__gthread_mutex_lock

11)..在__gthread_mutex_lock

12)..在std :: tr1 :: _ Sp_counted_base :: release

13)..在~shared_count

14)..在~shared_ptr

似乎shared_ptr已损坏?

1 个答案:

答案 0 :(得分:1)

我刚刚解决了这个问题。改变了这个:

#include <tr1/memory>#include <boost/shared_ptr.hpp>

std::tr1::shared_ptrboost::shared_ptr

此处描述了解决方案link