【问题标题】:C++ stream to memoryC++ 流到内存
【发布时间】:2010-10-21 15:43:58
【问题描述】:

如何创建std::ostreamstd::istream 对象来指向我分配和管理的一块内存(我不希望流释放我的内存)。

我正在考虑使用rdbuf()->pubsetbuf() 来修改其他流之一——比如sstringstream。但是我认为stringstream 使用的streambuf 之后会释放缓冲区吗?

基本上我正在尝试将一些东西序列化到共享内存中。

谢谢。

【问题讨论】:

    标签: c++ stream


    【解决方案1】:

    看看Boost.Interprocess库中的bufferstream类:

    缓冲流类提供 iostream 接口与直接 在固定大小的内存中格式化 带缓冲保护的缓冲器 溢出。

    【讨论】:

    • 我对否决票很好奇。有人对此解决方案有疑问吗?
    【解决方案2】:
    #include <iostream>
    #include <streambuf>
    
    //...
    size_t length = 100;
    auto pBuf = new char[length]; // allocate memory
    
    struct membuf: std::streambuf // derive because std::streambuf constructor is protected
    {
       membuf(char* p, size_t size) 
       {
           setp( p, p + size); // set start end end pointers
       }
       size_t written() {return pptr()-pbase();} // how many bytes were really written?
    };
    
    membuf sbuf( pBuf, length ); // our buffer object
    std::ostream out( &sbuf );   // stream using our buffer
    
    out << 12345.654e10 << std::endl;
    out.flush();
    
    std::cout << "Nr of written bytes: " << sbuf.written() << std::endl;
    std::cout << "Content: " << (char*)pBuf << std::endl;
    
    //...
    delete [] pBuf; // free memory 
    
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多