返回字符串结构是否安全?

时间:2014-04-28 22:17:31

标签: c++

我正在编写一个函数解析器,它需要递归地分割数据,即

aba$(2)cd$(5)efg

返回aba$(2)$(5)efg

我需要制作一个可以容纳三个字符串的结构,

struct split3 {
   std::string before, middle, after;
};

如果我在结构中分配字符串然后返回它们,这样安全吗?如果不是,我该怎么办?我不认为它是安全的,因为结构没有复制构造函数,并且字符串将存在于堆栈中,在返回后不会存在(无论如何)?

split3 func(...) {
s = split3();
... do stuff to s.before, s.middle, s.after;
return s;
}

3 个答案:

答案 0 :(得分:4)

是的,这很安全。 split3将被赋予一个默认的复制构造函数,它只会将字符串的复制构造函数调用3次。这听起来像是你想要的。

您在func()内的堆栈上创建的原始字符串在返回后将不再有效,但返回的split3对象中的副本将是真的。确定。

答案 1 :(得分:3)

是的,它是安全的(正确含义)。不需要显式复制构造函数,因为默认的复制构造函数就足够了。通过正确复制所有3个字符串来复制您的结构。

答案 2 :(得分:1)

像其他人说的那样安全。请记住,它正在制作副本。这意味着如果你有一个非常大的结构,它将不得不复制整个事物。如果它像这样小的东西,它并不重要。