簡體   English   中英

C++ 模板類僅因 uint8_t 類型崩潰

[英]C++ template class crashing by uint8_t type only

我剛剛在我的一個舊項目中發現了這個有趣的問題。 我定義了一個圍繞 std::shared_ptr 的類來實現一個簡單的動態數組,如下所示:

#include <memory>

template<class Type>
class Array
{
  size_t                m_size;
  std::shared_ptr<Type> m_array;

public:
  Array()
    : m_size( 0 )
    , m_array( nullptr, []( Type * p ){ delete[] p; } )
    {}

  Array( const size_t size )
    : m_size( size )
    , m_array( new Type[size] {}, []( Type * p ){ delete[] p; } )
    {}

  Type & operator[]( const size_t & id )
  {
    return m_array.get()[id];
  }

  const Type & operator[]( const size_t & id ) const
  {
    return m_array.get()[id];
  }

  Type * get()
  {
    return m_array.get();
  }

  const Type * get() const
  {
    return m_array.get();
  }

  size_t size() const
  {
    return m_size;
  }

  Array & operator= ( const Array<Type> array )
  {
    m_size  = array.size();
    m_array = array.m_array;
    return *this;
  };
};

它在 uint8_t 旁邊運行良好:

Array<int>  Int;      // good
Array<long> Long;     // good
Array<char> Char;     // good
Array<int8_t> Int8;   // good
Array<uint8_t> Uint8; // segmentation fault

int main() 
{ 
 // create scoped array 
  { 
    Array<uint8_t> pattern; 
  } 

// do something

return 0;
}

在構造函數旁邊沒有調用任何成員函數。 有誰知道為什么會發生這種情況? 編譯器為:gcc9.2.0-rhel7.6-binutils2.32.gold

謝謝,

使用不同版本的編譯器和 libstdc++ 導致了問題。 問題已解決,感謝您的問題和提示。 他們真的很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM