gpt4 book ai didi

c++ - 有没有办法确保存储在类中的 const 引用始终引用有效对象?

转载 作者:行者123 更新时间:2023-11-30 02:46:23 24 4
gpt4 key购买 nike

我编写了以下示例代码:

#include <iostream>

class B
{
int Value;

public:
B(int V) : Value(V) {}

int GetValue(void) const { return Value;}
};

class A
{
const B& b;

public:
A(const B &ObjectB) : b(ObjectB) {}

int GetValue(void) { return b.GetValue();}

};


B b(5);

A a1(B(5));

A a2(b);

A a3(B(3));


int main(void)
{
std::cout << a1.GetValue() << std::endl;
std::cout << a2.GetValue() << std::endl;
std::cout << a3.GetValue() << std::endl;

return 0;
}

用 mingw-g++ 编译并在 Windows 7 上执行,我得到

6829289
5
1875385008

因此,我从输出中得到的是这两个匿名对象在初始化完成时被销毁,即使它们是在全局上下文中声明的。

我的问题是:是否存在一种方法可以确保存储在类中的常量引用始终引用有效对象?

最佳答案

你可以在A类中做一件事:

A(B&&) = delete;

这样,尝试从 B 临时构造 A 的两行将无法编译。

这显然不会阻止您提供其他生命周期短于引用它的 A 对象的 B 对象,但这是朝着正确方向迈出的一步,可能捕获一些意外/粗心的滥用行为。 (其他答案已经讨论了设计方案和备选方案 - 我不会涵盖相同的内容/在图示方案中引用是否安全(r)已经是一个重要问题。)

关于c++ - 有没有办法确保存储在类中的 const 引用始终引用有效对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621223/

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