相关疑难解决方法(0)

重载成员访问运算符 - > ,.*(C++)

据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等.

特别是,传递给这些操作符函数的内容以及应返回的内容是什么?

操作员如何运作(例如operator->(...))知道所指的成员是什么?可以知道吗?它甚至需要知道吗?

最后,是否需要考虑常见因素?例如,当重载类似的东西时operator[],通常你需要const和非const版本.成员访问运算符是否需要const和非const版本?

c++ operator-overloading c++-faq

119
推荐指数
5
解决办法
8万
查看次数

使C++类成为监视器(在并发意义上)

我想确保一次只有一个线程可以运行我的C++类的方法.换句话说,让类的行为类似于Monitor.

是否有模式,模板化的方式来做这个,或者我可以使用一些Boost类?因为我到目前为止唯一的想法是添加一个关键部分成员,并在每个方法的开头获取它并在结束时释放它(当然使用RAII).但这似乎非常多余,我不能将它重用于其他类.

c++ concurrency multithreading templates boost

15
推荐指数
2
解决办法
2万
查看次数

为什么需要两次将迭代器解引用到智能指针,而不是使用operator->()?

假设我有以下代码:

#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*

这里有一些相关的问题,对如何箭头超载工作我们需要,而不是取消引用箭头的两倍

containers iterator smart-pointers c++11

4
推荐指数
1
解决办法
951
查看次数