C++ Logo

std-proposals

Advanced search

Re: Default assignment operators from copy/move constructors

From: Ville Voutilainen <ville.voutilainen_at_[hidden]>
Date: Thu, 6 Aug 2020 23:56:59 +0300
On Thu, 6 Aug 2020 at 23:49, Walt Karas via Std-Proposals
<std-proposals_at_[hidden]> wrote:
>
> If a class C has a copy constructor, seems desirable to generate a default copy assign like:
>
>
> C & operator = (C const &rhs)
> {
> if (this != &rhs)
> {
>
> this->~C();
> ::new (this) C(rhs);
> }
> return *this;
> }
>
>
> Likewise for default move assign when move copy is defined:
>
>
> C & operator = (C &&rhs)
>
> {
> if (this != &rhs)
> {
>
> this->~C();
> ::new (this) C(std::move(rhs));
> }
> return *this;

Those definitions are not exception-safe, so I'd find it questionable
to generate them by default.

Received on 2020-08-06 16:00:33