首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中复制/重新分配``std::Copying buf`

在C++中复制/重新分配``std::Copying buf`
EN

Stack Overflow用户
提问于 2020-02-11 12:51:40
回答 1查看 121关注 0票数 0

我正在编写一个从套接字向终端写入数据的类。为了测试我的一些方法,我为我的一个类变量提供了一个设置器方法,它恰好是一个std::stringbuf对象。当试图给类实例分配一个新对象时,我的编辑器在分配中显示了一个错误。为了清楚起见,下面是我的类原型:

代码语言:javascript
复制
class MainServer : BaseServer 
{
    public:
        MainServer();
        void setByteBuffer(std::stringbuf);
    private:
        int valread;
        std::stringbuf byteBuffer;
        void dataRead();
        void terminalWrite();
};

制造新麻烦的方法是setByteBuffer,它的实现是:

代码语言:javascript
复制
void MainServer::setByteBuffer(std::stringbuf testByteBuffer)
{
    byteBuffer = testByteBuffer;
}

我的编辑器给我的错误是:

代码语言:javascript
复制
std::stringbuf &std::stringbuf::operator=(const std::stringbuf &)
+1 overload

@brief %Vector assignment operator.
@param __x A %vector of identical element and allocator types.

All the elements of @a __x are copied, but any unused capacity in
@a __x will not be copied.

Whether the allocator is copied depends on the allocator traits.

function "std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc>::operator=(const std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc> &) [with _CharT=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]" (declared at line 140 of "/usr/include/c++/9/sstream") cannot be referenced -- it is a deleted function

似乎stringbuf类的赋值(意思是复制)构造函数并不适合我要做的事情。有什么方法可以解决这个问题呢?我认为一种解决方案是使用stringbuf *,但这似乎是一个坏主意,因为这将只用于测试目的。

EN

回答 1

Stack Overflow用户

发布于 2020-02-11 14:19:17

对错误最简单的解决方案是:[godbolt example]

代码语言:javascript
复制
byteBuffer = std::move(testByteBuffer);

stringbuf对象不可复制,但它们是可移动的。

(然而,正如user7860670指出的,使用std::vectorstd::string作为存储而不是std::stringbuf,您可能会更容易一些。如果没有更多的上下文来帮助理解您正在尝试做什么,很难提出一个理想的解决方案-如果您可以让代码工作,您可能会consider posting on CodeReview.SE进一步改进。无论如何,如果您的意图是取得传入对象的所有权,移动它无论如何都是一种很好的做法,以避免不必要的复制。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60162215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档