#include <iostream>
class critical_section
{
public:
void lock() { std::cout << "lock\n"; }
void unlock() { std::cout << "unlock\n"; }
struct lock_obj
{
explicit lock_obj(critical_section& cs) : cs(cs) { cs.lock(); }
~lock_obj() { cs.unlock(); }
private:
lock_obj(const lock_obj& rhs) : cs(rhs.cs) { std::cout << "!!!\n"; }
private:
void operator=(const lock_obj&);
critical_section& cs;
};
lock_obj guard() { return lock_obj(*this); }
};
critical_section cs;
int main()
{
auto guard = cs.guard();
std::cout << "-----\n";
}
если копирующего конструктора нет, код не скомпилируется из за его недоступности в guard()
в то же время если он есть — он не вызывается
почему так?