1

好的,我有以下事件序列:

  1. 我构造了一个右值对象
  2. 我将一个迭代器传递给那个右值对象到一个函数中作为参数
  3. 该函数在此迭代器上运行
  4. 该函数按值返回此迭代器
  5. 我取消引用迭代器

我不知道是什么原因导致清理 r 值对象,是该行的终止吗?

好的,现在具体来说,我试图为这个问题想出一个更好的答案:C++ 中的字符串乘法我有代码:

const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
const string foo(&*generate_n(string(bar * length, '\0').begin(), bar * length, [&]() {
    static auto i = 0U;
    return multiplicand[i++ % length];
}) - bar * length);

所以我想知道什么时候应该销毁string内部构造的。generate_n顺便说一句,这似乎在 gcc 5.1 上运行良好:http: //ideone.com/Y8rDs5但我可能只是得到未定义的行为。Visual Studio 2015 上的代码段错误这一事实暗示了这一点。

4

1 回答 1

1

诸如此类的临时变量在完整表达式string(bar * length, '\0')的末尾被销毁。完整的表达式是. 因此,临时字符串不会在返回的 ctor 之前被销毁。const string foofoo

于 2016-02-24T11:01:01.363 回答