2012-01-14 69 views
1

我想覆盖“=”运算符,但我有一个问题,类有一个const成员,我想改变,当我使用“=”,我认为解构对象,并构造一个新的对象可能会工作,但“这个”不能改变。所以,你会帮助我吗?C++重载运算符和这

+2

我想简单地不标注成员const不是一个选项?为什么不? – 2012-01-14 04:23:40

回答

1

您可能会标记要更改的成员mutable。这是关键字的用途。

当然,你也可以在隐性契约破坏你的类的用户认为operator=不会修改类...

+0

事实上,我只是想用“=”将对象的const成员复制到另一个对象。我想知道如何使用解构器和构造器来创建它。 – TonyWen 2012-01-14 04:19:14

+0

@TonyWen:你可以明确地调用析构函数,然后使用放置'new',但那不会是异常安全的。 – 2012-01-14 04:49:04

+0

@BenVoigt:无风险并不好玩...... – 2012-01-14 04:54:55

1

你可以使用平普尔成语。例如:

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_; 
}; 

我真的没有看到这点。