朋友功能有哪些安全隐患?

时间:2014-04-15 09:08:01

标签: c++ friend

朋友功能有哪些安全隐患?它会破坏C ++中的封装和数据隐藏吗?

尽管进行了大量研究,但我无法得到正确的答案。有人可以用例子给出具体答案吗?

4 个答案:

答案 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。