отключение к-торов по умолчанию
От: Иванков Дмитрий Россия  
Дата: 21.02.06 09:01
Оценка:
Есть ли стандартные способы управления созданием default constructor, copy constructor, copy assignment operator?
Или хотя бы объявление их приватными.

Чтобы "убрать" конструктор по умолчанию подходит такой класс
struct noDefaultCtor
{
    protected:
    noDefaultCtor(){};
};

Вроде не к чему придраться =)

Для отключения оператора присваивания подходит такой базовый ькласс
struct noCopy
{
    static char _;
    char& __;
    noCopy() : __(noCopy::_) {};    
};
char noCopy::_ = '_';

Но жаль 4 байта

А вот с конструктором копирования не получается, такой класс не работает
struct noCopyCtor
{
    noCopyCtor(){}
    private:
    noCopyCtor(const noCopyCtor& t){};
};


Использование предполагается такое:
struct A : noCopyCtor, noDefaultCtor
{
 ...
};


Есть ли другие варианты по оператору присваивания и хоть какие-нибудь по конструктору копирования?
Re: отключение к-торов по умолчанию
От: Bell Россия  
Дата: 21.02.06 09:09
Оценка: 2 (1) +1
Здравствуйте, Иванков Дмитрий, Вы писали:

boost::noncopyable
Любите книгу — источник знаний (с) М.Горький
Re: отключение к-торов по умолчанию
От: Conr Россия  
Дата: 21.02.06 09:17
Оценка: 2 (1) +1
Здравствуйте, Иванков Дмитрий, Вы писали:

ИД>Есть ли стандартные способы управления созданием default constructor, copy constructor, copy assignment operator?

ИД>Или хотя бы объявление их приватными.

ИД>Есть ли другие варианты по оператору присваивания и хоть какие-нибудь по конструктору копирования?


struct nocopyble
{
nocopyble() {}
private:
nocopyble(const nocopyble&) {}
};

struct nonassign
{
nonassign() {}
private:
const nonassign& operator=(const nonassign&) { return *this; }
};

class A : public nocopyble, public nonassign
{

};

int main(int argc, _TCHAR* argv[])
{
A a, b, c(a);
a = b;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.