在没有活动异常的情况下调用C ++终止(gdb)

时间:2013-01-28 22:41:42

标签: c++ xcode

使用iOS 5.X Cpp 11 xcode的

我正在尝试确定导致此错误的原因。 它可能是在线程完成之前调用析构函数引起的。


// default_delete

template <class _Tp>
struct _LIBCPP_VISIBLE default_delete
{
    _LIBCPP_INLINE_VISIBILITY default_delete() _NOEXCEPT {}
    template <class _Up>
    _LIBCPP_INLINE_VISIBILITY default_delete(const default_delete<_Up>&,
         typename enable_if<is_convertible<_Up*, _Tp*>::value>::type* = 0) _NOEXCEPT {}
    _LIBCPP_INLINE_VISIBILITY void operator() (_Tp* __ptr) const _NOEXCEPT
    {
        static_assert(sizeof(_Tp) > 0, "default_delete can not delete incomplete type"); 
        delete __ptr;
    }
};

堆栈跟踪如下:

template <class _Tp>
struct _LIBCPP_VISIBLE default_delete
{
    _LIBCPP_INLINE_VISIBILITY default_delete() _NOEXCEPT {}
    template <class _Up>
    _LIBCPP_INLINE_VISIBILITY default_delete(const default_delete<_Up>&,
         typename enable_if<is_convertible<_Up*, _Tp*>::value>::type* = 0) _NOEXCEPT {}
    _LIBCPP_INLINE_VISIBILITY void operator() (_Tp* __ptr) const _NOEXCEPT
    {
        static_assert(sizeof(_Tp) > 0, "default_delete can not delete incomplete type"); 
        delete __ptr;
    }
};

1 个答案:

答案 0 :(得分:6)

回溯中的thread::~thread()表明线程在对象被破坏时仍在运行。那是一个错误;在销毁之前,你必须在线程对象上调用join()detach()