避免返回handles指向对象内部成分
请看下面例子,
类1
class pointY{
public:
pointY(int a, int b)
{
x = a;
y = b;
}
pointY() = default;
void setX(int ter)
{
x = ter;
}
void setY(int ter)
{
y = ter;
}
void show()
{
cout << "x:" << x << "y:" << y << endl;
}
private:
int x{ 0 };
int y{ 0 };
};
结构体
using RecData = struct MyStruct
{
pointY left_upPoint;
pointY right_downPoint;
};
类2
class CTangleTy
{
public:
CTangleTy(shared_ptr<RecData> m_data)
{
m_tydata = m_data;
}
pointY& GetLeft() const
{
return m_tydata->left_upPoint;
}
pointY& GetRight() const
{
return m_tydata->right_downPoint;
}
private:
shared_ptr<RecData> m_tydata;
};
现在打算这么用:
pointY p1(10, 10);
pointY p2(100, 100);
shared_ptr<RecData>m_sptr = make_shared<RecData>();
m_sptr->left_upPoint = p1;
m_sptr->right_downPoint = p2;
CTangleTy t(m_sptr);
t.GetRight().setX(10000);//可以修改是个bug
应该改为:
const pointY& GetLeft() const
{
return m_tydata->left_upPoint;
}
const pointY& GetRight() const
{
return m_tydata->right_downPoint;
}
总结: