持有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 ++引用是否可以防止变量被破坏?的主要内容,如果未能解决你的问题,请参考以下文章