2012-01-14 2 views
1

Я хочу переопределить оператор «=», но у меня есть проблема, у класса есть член const, который я хочу изменить, когда я использую «=», я считаю, что деконструкция объекта и построение новый объект может быть обработан, но «это» не может быть изменено. Так вы бы мне помогли?Оператор переопределения C++ и этот

+2

Я полагаю, что просто не маркировка элемента const не является вариантом? Почему нет? –

ответ

1

Вы можете пометить член, который хотите изменить mutable. Это цель ключевого слова.

Конечно, вы можете разорвать неявный контракт пользователям вашего класса, который operator= не изменит класс ...

+0

На самом деле, я просто хочу использовать «=», чтобы скопировать константный элемент объекта в другой. Я хочу знать, как использовать конструктор и конструктор для его создания. – TonyWen

+0

@TonyWen: Вы можете явно вызвать деструктор, а затем использовать место размещения 'new', но это не будет безопасным для исключений. –

+0

@BenVoigt: без риска - это не весело ... –

1

Вы можете использовать Pimpl идиомы. Например:

class Foo_impl 
{ 
public: 
    Foo(int x, int y, int z) 
     :x_(x), y_(y), z_(z) 
    {} 
    const int x_; 
    int y_,z_; 
}; 

class Foo 
{ 
public: 
    Foo(int x, int y, int z) 
     :impl_(new Foo_impl(x,y,z)) 
    {}  

    Foo & operator=(Foo rhs) 
    { 
     swap(rhs); 
     return *this; 
    } 

    void swap(Foo & rhs) 
    { 
     std::swap(impl_, rhs.impl_); 
    } 

    // still need copy constructor 
private: 
    std::unique_ptr<Foo_impl> impl_; 
}; 

Я действительно не вижу смысла в этом.

Смежные вопросы