如何确保无法在类外传递/访问变量(指针)?
我知道明显的答案是使变量成为私有或受保护但代码是API的一部分,并且该类将由可以简单地创建公共get
函数来克服该设计的用户进行子类化。 / p>
class Component
{
public:
GUID gUid;
template<typename T>
T* addComponent()
{
T* cmp = new T();
auto res = components.emplace(cmp->gUid, cmp);
return cmp;
}
protected:
std::unordered_map<GUID, Component*> components;
};
class UpdaterComponent : public Component
{
public:
void init()
{
nCmp = addComponent<NetworkComponent>(); // ok to store and access component within class
}
// Not ok to expose sub components to outside
NetworkComponent* getNetworkComponent()
{
return nCmp;
}
private:
NetworkComponent* nCmp;
};
答案 0 :(得分:2)
你提到,它将被用户子类化,你担心barparam = (c, len(d))
foo = Foo(a,b)
foo.bar(*barparam)
函数会让他们访问指针。
在这种情况下:将其设为私有。这就是它的用途。 这也将禁止继承的类访问指针。
答案 1 :(得分:0)
访问控制可以防止错误,而不是恶意。
他们可以简单地复制/粘贴您的标题,在您的类定义中插入friend
函数,包含其标题副本,然后根据需要绕过private
或protected
规则
您可以隐藏pImpl
类型模式后面的结构布局,但即使这样,他们也可以对布局进行反向工程并访问它。
除非硬件/操作系统支持加密内存,否则无法完成您的工作。