C++ Logo

std-proposals

Advanced search

Re: user copy constructor

From: Matthew Woehlke <mwoehlke.floss_at_[hidden]>
Date: Thu, 12 Dec 2019 15:25:42 -0500
On 12/12/2019 15.17, Mario Charest via Std-Proposals wrote:
> Imagine a class with 20 variables, out of these variable one should not be
> copied by the copy constructor
>
> class Foo {
> std::vector<int> first;
> std::list<int> second;
> ...
> void *no_copy;
>
> Foo (const Foo &);
> }
>
> Writing the Foo copy constructor is detious, error prone and leads to
> higher maintenance. But what if one could create the copy constructor in
> such a way that it would tell the compiler to default copy construct all
> variables, except one (or more)
>
> Foo::Foo(const Foo &) *:! *no_copy(nullptr)
> {
> }
>
> Notice the:!
>
> Did not put much though into the details, but wanted to first get a feel if
> this make sense.

I've done something a bit like this¹ by wrapping that particular member
in a utility class whose copy constructor has the desired behavior. Then
the owning class just has a strictly defaulted copy ctor.

Given that it isn't hard to do that, I'm not sure if a language feature
has sufficient value.

  class foo
  {
    foo(foo const&) = default

    ... // members
    null_on_copy_ptr<void> no_copy;
    ... // members
  }


https://github.com/Kitware/seal-tk/blob/master/sealtk/core/UnsharedPointer.hpp)

-- 
Matthew

Received on 2019-12-12 14:28:08