持有C ++引用是否可以防止变量被破坏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持有C ++引用是否可以防止变量被破坏?相关的知识,希望对你有一定的参考价值。

来自Java / C#背景,我正在尝试实现一个null安全检查对象。以下代码尝试检查对象上是否确实存在颜色。如果有,我希望能够做一些事情(例如在形状上绘制颜色)。我希望能够将此颜色设置回null(noneColor),以防止为对象着色。

我不想为此颜色设置一个指针,因为有必要在每个设置方法和解构函数上将其删除。这是个坏主意吗?

代码:

static const Color& noneColor = Color();

static bool isNoneColor(const Color& color) {
    return std::addressof(noneColor) == std::addressof(color);
}

MyShape:MyShape() {
    this->color = noneColor; // this->color is an object of Color
}

void MyShape::setColor(const Color& newColor)
{
    this->color= newColor;
}

void MyShape::draw()
{
    if(!isNoneColor(this->color))
        // Color shape
}

//different scope/class
void B::setColorForShape()
{
    Color color = Color(255,255,255);
    a->setColor(color);
    // Calling isNoneColor(a->color); should return false;
    // After this function ends does variable a->color have undefined behavior? 
}

void B::setNoneColorForShape()
{
    a->setColor(noneColor);
    //Calling isNoneColor(a->color); should return true;
}

方法结束后用a-> color调用isNoneColor是否安全?

答案

持有C ++引用是否可以防止变量被破坏?

编号

isNoneColor永远不会为MyShape的成员返回true,因为该成员将始终具有与noneColor不同的地址。

以上是关于持有C ++引用是否可以防止变量被破坏?的主要内容,如果未能解决你的问题,请参考以下文章

c语言局部变量可以被其他的原文件引用吗

c语言局部变量可以被其他的原文件引用吗

C语言面试题大汇总

Visual Studio 2019,C#代码库,是否可以更改引用的名称?

静态变量

extract method(重新组织函数)