And*_*ent 3 c++ boost boost-thread
我正在尝试理解一些导致PC-Lint悲伤的提升代码,并以一种我认为不合法的C++但在VS2008中编译好的方式使用friend关键字.
我以为我理解朋友是宣告课程和功能的一种方式.我认为在这样的函数定义上使用是不合法的.但是,MSDN页面非常具体:
可以在类声明中定义友元函数.这些函数是内联函数,就像成员内联函数一样,它们的行为就好像它们是在看到所有类成员之后但在类作用域关闭之前(类声明结束)之前立即定义的.
在类声明中定义的友元函数不在封闭类的范围内考虑; 他们在文件范围内.
所以我理解这是合法的,如果不寻常的语法.
我不确定它是什么,因为宣布朋友的正常原因是为了增加访问权限.但是,结构的成员默认都是公共的,因此这里没有这样的好处.
我错过了一些深刻的东西,或者这只是一些风格上的提升问题,有人不喜欢在结构体之后放入内联自由函数?
请注意,_InterlockedIncrement是Win32上的内部函数.
# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
struct thread_data_base
{
long count;
detail::win32::handle_manager thread_handle;
detail::win32::handle_manager interruption_handle;
boost::detail::thread_exit_callback_node* thread_exit_callbacks;
boost::detail::tss_data_node* tss_data;
bool interruption_enabled;
unsigned id;
thread_data_base():
count(0),thread_handle(detail::win32::invalid_handle_value),
interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)),
thread_exit_callbacks(0),tss_data(0),
interruption_enabled(true),
id(0)
{}
virtual ~thread_data_base()
{}
friend void intrusive_ptr_add_ref(thread_data_base * p)
{
BOOST_INTERLOCKED_INCREMENT(&p->count);
}
...
};
Run Code Online (Sandbox Code Playgroud)
更新
感谢Chubsdad在下面的回答,我想我现在明白了,我对正在发生的事情的总结:
intrusive_ptr_add_ref(somePtrToThreadData)| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |