0
我有一個Visual Studio 2008 C++程序,我有自己的流實現。事情是這樣的:編譯器錯誤C2448返回一個std流
class Foo : public std::ostream
{
public:
Foo(int a) : std::ostream(&buf_) { };
Foo(boost::shared_ptr<int> a) : std::ostream(&buf_) { };
private:
std::filebuf buf_;
};
class Bar
{
public:
Foo GetFoo() { return Foo(1); };
Foo GetFoo2() { return Foo(boost::shared_ptr<int>(new int(1))); };
};
的預期用途是這樣的:
Bar b;
Foo f = b.GetFoo(); // works fine
Foo f2 = b.GetFoo2(); // compiler error
不幸的是,這給了我一個編譯器錯誤有關basic_ios拷貝構造函數。
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
爲什麼是第一Foo(int)
構造好與編譯器,而是一個涉及boost::shared_ptr
是不是?
感謝, PaulH
我在調試模式下編譯,所以我很驚訝RVO打開。 當你從一個使它的拷貝構造函數私有的類派生時,你能實現一個拷貝構造函數嗎? – PaulH
它可能是RVO和內聯的組合......如果你真的想檢查,你可以把'get'函數放在單獨的TU中。 –