好的,我有这样的事件序列:
- 我构造一个 r 值对象
- 我将该 r 值对象的迭代器作为参数传递到函数中
- 该函数在此迭代器上运行
- 该函数按值返回此迭代器
- 我取消引用迭代器
我不知道是什么原因导致清理r值对象,是那行的终止吗?
好的,现在具体来说,我试图为这个问题想出一个更好的答案:字符串乘法 C++ 我有代码:
const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
const string foo(&*generate_n(string(bar * length, ' ').begin(), bar * length, [&]() {
static auto i = 0U;
return multiplicand[i++ % length];
}) - bar * length);
所以我想知道什么时候应该摧毁generate_n
内部建造的string
。顺便说一句,这似乎在 gcc 5.1 上工作正常: http://ideone.com/Y8rDs5 但我可能只是得到未定义的行为。Visual Studio 2015上的代码段错误这一事实暗示了这一点。
临时表达式(如 string(bar * length, ' ')
)在完整表达式结束时被销毁。完整的表达式是 const string foo
的初始值设定项。因此,在 foo
的 ctor 返回之前,不会销毁临时字符串。