据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等.
特别是,传递给这些操作符函数的内容以及应返回的内容是什么?
操作员如何运作(例如operator->(...))知道所指的成员是什么?可以知道吗?它甚至需要知道吗?
最后,是否需要考虑常见因素?例如,当重载类似的东西时operator[],通常你需要const和非const版本.成员访问运算符是否需要const和非const版本?
我想确保一次只有一个线程可以运行我的C++类的方法.换句话说,让类的行为类似于Monitor.
是否有模式,模板化的方式来做这个,或者我可以使用一些Boost类?因为我到目前为止唯一的想法是添加一个关键部分成员,并在每个方法的开头获取它并在结束时释放它(当然使用RAII).但这似乎非常多余,我不能将它重用于其他类.
假设我有以下代码:
#include <iostream>
#include <deque>
#include <memory>
struct Test
{
int test;
};
int main(int, char**)
{
std::deque<std::unique_ptr<Test>> deque;
deque.push_back(std::unique_ptr<Test>(new Test{10}));
auto start = deque.begin();
std::cout << start->test << std::endl; // <- compilation error
std::cout << (start.operator->())->operator->()->test << std::endl; // <- OK
}
Run Code Online (Sandbox Code Playgroud)
为什么将智能指针视为常规指针对象,尽管并非如此(据我所知)?据我所知,operator->()应该重复出现直到到达T*。
这里有一些相关的问题,对如何箭头超载工作和我们需要,而不是取消引用箭头的两倍。