以下代码在用clang编译并与libc ++链接时会导致段错误,但在使用libstc ++或使用gcc进行编译时效果很好。
#include <iostream>
#include <sstream>
class MyStream : public std::ostream {
public:
MyStream() {
rdbuf( &buffer );
}
private:
std::stringbuf buffer;
};
int main() {
MyStream stream{};
stream << "Hello world" << std::endl;
return 0;
}
答案 0 :(得分:0)
尝试这样的事情:
#include <new>
class MyStream : public std::ostream {
public:
MyStream() : std::ostream( new (buffer) std::stringbuf ) { }
~MyStream() {
using std::stringbuf;
((stringbuf*)buffer)->~stringbuf();
}
private:
char buffer[sizeof(std::stringbuf)];
};
这应该首先通过placement new
初始化缓冲区,并允许您将其传递给ostream
。