朋友功能有哪些安全隐患?它会破坏C ++中的封装和数据隐藏吗?
尽管进行了大量研究,但我无法得到正确的答案。有人可以用例子给出具体答案吗?
答案 0 :(得分:1)
这是一个例子,函数FUNC将破坏多线程环境中的数据保护。
# include <windows.h>
# include <iostream>
using namespace std;
void func();
class DataAdapter
{
friend void func();
private:
static volatile LONG _index;
public:
static void incr()
{
InterlockedIncrement(&_index);
}
};
void func()
{
DataAdapter::_index += 1;
}
DWORD WINAPI threadproc(void *pdata)
{
pdata = pdata;
DataAdapter::incr();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread = CreateThread(NULL , 0 , threadproc , 0 , 0 , 0);
WaitForSingleObject(hThread , 5000);
return 0;
}
答案 1 :(得分:1)
朋友没有特别的安全风险 功能。朋友功能是实施的一部分 班级,就像班级成员一样;是否有功能 会员或朋友不会改变任何关于 安全风险(或其他任何)。
答案 2 :(得分:0)
重要的是要记住封装和安全性是两回事。
friend
是C ++语言的一个特性,它作为数据隐藏的一种“例外”。
它与安全性无关,因为friend
仅存在于语言级别,而不是存在于安全问题的运行时。
答案 3 :(得分:0)
我将此作为代表@mankrase的答案
始终可以合法访问任何对象的私有成员。此外,如果您的代码包含未定义的行为,则绝对会发生任何事情(无论是否存在友元函数)。 Friend functions
不代表安全风险;它们在安全性方面是中性的(在最好的情况下,它们对安全性有益,因为它们可以使代码更简单,更好地封装)。
感谢Mankrase。