2

デストラクタに互換性がないということから継承すると、ICL コンパイラの警告が表示std::streambufされます。ここで何が間違っているのでしょうか? 仮想デストラクタにしても機能しません。

警告 #809: 仮想関数 "CAbcBuffer::~CAbcBuffer" の例外仕様は、オーバーライドされた関数 "std::basic_streambuf<_Elem, _Traits>::~basic_streambuf [with _Elem=char, _Traits=std::char_traits] の例外仕様と互換性がありません。 "

class CAbcBuffer : public std::streambuf
{
    protected:
        /** Work buffer */
        char *buffer;
    public:
        explicit CAbcBuffer()
        {
            /*
            Stores the beginning pointer, the next pointer, and the end pointer for the 
            input buffer
            */
            buffer = new char[100];
            std::streambuf::setg(buffer, buffer, buffer);
        }

        ~CAbcBuffer() {
            delete [] buffer;
        }
}
4

1 に答える 1

2

throw()デストラクタの宣言がありません。これで問題は解決します。

~CAbcBuffer() throw() {
    delete [] buffer;
}
于 2014-03-01T19:30:46.280 に答える