gpt4 book ai didi

c++ - reference_wrapper 不会相应地更改地址

转载 作者:行者123 更新时间:2023-11-30 04:03:35 26 4
gpt4 key购买 nike

这个问题是this的延伸问题。我知道由于 push_back() 发生了新的内存分配,并且 std::vector v 的第一个元素的地址发生了变化,但 std::vector v2 相应地更改其地址?

#include <memory>
#include <iostream>
#include <vector>
#include <functional>

int main()
{
std::vector<int> v;
std::vector<std::reference_wrapper<int>> v2;

for (int i=0; i<3; ++i)
{
int b = i;

v.push_back(b);
v2.push_back(v.back());

std::cout << "org: " << std::addressof(v[0]) << std::endl;
std::cout << "ref: " << std::addressof(v2[0].get()) << std::endl;

}

return 0;
}

输出:

org: 0x605010
ref: 0x605030
org: 0x605050
ref: 0x605010
org: 0x605030
ref: 0x605070

最佳答案

不,reference_wrapper 就像一个指针。当第一个vector重新分配时,内存中旧的int对象被销毁,reference_wrapper指向的int无效。现在使用它是错误的。

关于c++ - reference_wrapper 不会相应地更改地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24346582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com