使用类成员初始化父类

Pau*_*ulH 0 c++

我有一个这样的basic_iostream派生类:

class MyStream : public std::basic_iostream< char >, 
                 private boost::noncopyable
{
public:
    explicit MyStream( SomeUsefulData& data ) : 
        buffer_( data ),
        std::basic_iostream< char >( &buffer_ )
    {
    };

    ~MyStream()
    {
    };

private:
    /// internal stream buffer
   MyStreamBuffer< char > buffer_;
}; // class MyStream
Run Code Online (Sandbox Code Playgroud)

但是,当我创建它的实例时,我得到一个DataAbort异常.

SomeUsefulData data;
MyStream stream( data );  // <- Data Abort
Run Code Online (Sandbox Code Playgroud)

但是,如果我将MyStream更改为堆分配MyStreamBuffer,它可以正常工作:

class MyStream : public std::basic_iostream< char >, 
                 private boost::noncopyable
{
public:
    explicit MyStream( SomeUsefulData& data ) : 
        std::basic_iostream< char >( new MyStreamBuffer< char >( data ) )
    {
    };

    ~MyStream()
    {
        delete rdbuf();
    };
}; // class MyStream
Run Code Online (Sandbox Code Playgroud)

使用类成员初始化父类是错误的吗?

谢谢,PaulH

Jam*_*mes 6

无论您将初始化语句置于何种顺序,都会首先初始化直接基类.如果您打开更多编译器警告,则应该收到有关此问题的警告.

这意味着是的,用成员初始化基类是不对的,对不起!