代码之家  ›  专栏  ›  技术社区  ›  FireAphis david.pfx

std::string::assign是否取得字符串的“所有权”?

  •  23
  • FireAphis david.pfx  · 技术社区  · 14 年前

    我在理解 string::assign 方法。考虑以下代码:

    char* c = new char[38];
    strcpy(c, "All your base are belong to us!");
    std::string s;
    s.assign(c, 38);
    

    s.assign assign operator= ? 如果它不复制,那么它是释放内存还是我的责任?

    非常感谢。

    3 回复  |  直到 14 年前
        1
  •  31
  •   Konrad    11 年前

    s.assign是否分配了一个新的缓冲区并将字符串复制到其中,或者它承担了指针的所有权;

    assign 将字符数组复制到字符串中。如果字符串中已经分配的缓冲区不足,它将在内部重新分配内存。STL字符串将

    如果它复制,那么assign和operator=之间的区别是什么?

    两者应该以相同的方式工作,但是STL assign方法有许多重载,这使您可以更好地控制发生的事情。看一看 this page

    更新:The MSDN has a number of examples 各种各样的 分配 超载。

    如果它不复制,那么它是释放内存还是我的责任?

        2
  •  16
  •   A. Levy    14 年前

    它复制。两者的区别 assign operator= 您可以指定要复制的字符数 包括空字符 . 操作符=只是将c字符串复制到第一个空字节。

        3
  •  1
  •   fmuecke    14 年前

    但是,大多数实现只会复制字符串。

    当然,如果是在堆上创建的(或使用智能指针),则必须释放字符串对象;)

    Assign和operator=可以互相实现,因为它们做相同的事情-取决于调用哪个版本的Assign(对于所有重载,请参见 cpp reference ).