gpt4 book ai didi

c++ - 如何解决悬空的 const ref

转载 作者:行者123 更新时间:2023-12-01 09:04:12 24 4
gpt4 key购买 nike

下面的小程序

#include <vector>
#include <iostream>

std::vector<int> someNums()
{
return {3, 5, 7, 11};
}

class Woop
{
public:
Woop(const std::vector<int>& nums) : numbers(nums) {}
void report()
{
for (int i : numbers)
std::cout << i << ' ';
std::cout << '\n';
}
private:
const std::vector<int>& numbers;
};

int main()
{
Woop woop(someNums());
woop.report();
}

有一个悬空引用问题,似乎没有编译器警告过。
问题是临时变量可以绑定(bind)到 const-refs,你可以
然后留下来。那么问题是;有没有办法避免陷入这个问题?最好是一个
不涉及牺牲 const 正确性,或总是使
大对象的拷贝。

最佳答案

使您的类不那么容易受到攻击的一种方法是添加一个已删除的构造函数,该构造函数采用右引用。这将阻止您的类实例绑定(bind)到临时对象。

Woop(std::vector<int>&& nums)  =delete;

这个被删除的构造函数实际上会使 O/P 代码无法编译,这可能是您正在寻找的行为?

关于c++ - 如何解决悬空的 const ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60616625/

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