我正在编写一个函数解析器,它需要递归地分割数据,即
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;
}
答案 0 :(得分:4)
是的,这很安全。 split3将被赋予一个默认的复制构造函数,它只会将字符串的复制构造函数调用3次。这听起来像是你想要的。
您在func()内的堆栈上创建的原始字符串在返回后将不再有效,但返回的split3对象中的副本将是真的。确定。
答案 1 :(得分:3)
是的,它是安全的(正确含义)。不需要显式复制构造函数,因为默认的复制构造函数就足够了。通过正确复制所有3个字符串来复制您的结构。
答案 2 :(得分:1)
像其他人说的那样安全。请记住,它正在制作副本。这意味着如果你有一个非常大的结构,它将不得不复制整个事物。如果它像这样小的东西,它并不重要。