[英]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.