копирующий конструктор
От: Abyx Россия  
Дата: 11.05.11 14:46
Оценка:
#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()
в то же время если он есть — он не вызывается

почему так?
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.