我正在编写一个需要递归拆分数据的函数解析器,即
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;
}发布于 2014-04-28 22:18:43
是的,很安全。split3将被赋予一个默认的复制构造函数,该构造函数将只调用字符串3次。听起来这就是你想要的。
确实,您在func()堆栈上创建的原始字符串在返回后将不再有效,但返回的split3对象内的副本将是正常的。
发布于 2014-04-28 22:20:00
是的,它是安全的(在正确的意义上)。不需要显式复制构造函数,因为默认的复制构造函数就足够了。通过正确复制所有3个字符串,您的结构将被复制。
发布于 2014-04-28 22:52:11
就像其他人说的那样,这是安全的。记住这是在复制。这意味着,如果你有一个非常大的结构,它将不得不复制整个东西。如果是这样的小东西,那就不重要了。
https://stackoverflow.com/questions/23352142
复制相似问题