Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #14604

Re: A question on "uncopyable" that disable copy constructor

From 88888 Dihedral <dihedral88888@googlemail.com>
Newsgroups comp.lang.c++
Subject Re: A question on "uncopyable" that disable copy constructor
Date 2012-02-28 17:01 -0800
Organization http://groups.google.com
Message-ID <23937421.477.1330477265253.JavaMail.geo-discussion-forums@pbsp8> (permalink)
References <22985212.2610.1329972334326.JavaMail.geo-discussion-forums@ynnk21> <ji8dae$uda$1@mx1.internetia.pl> <4f493210$0$3079$7b1e8fa0@news.nbl.fi>

Show all headers | View raw


在 2012年2月26日星期日UTC+8上午3时10分08秒,Juha Nieminen写道:
> bartek szurgot <basz@no.spam> wrote:
> > std::vector<Movable> v;
> > Movable m;
> > v.push_back(m); // error - cannot copy
> > v.push_back( std::move(m) ); // ok - moves object
> 
>   I'm not so sure doing that is such a good "pattern" because after
> giving 'm' to the vector you are left with an "empty"/"null" 'm' which
> has nothing in it (because what it had was moved to the vector).
> 
>   A more sensible "pattern" would be to create a temporary that gets
> destroyed immediately after its contents have been moved to the vector,
> that is:
> 
>     v.push_back(Movable());
> 
>   OTOH, there might be some situations where you need to do it like your
> version, for example like:
> 
>     Movable m;
>     m.doSomething(abc);
>     m.doSomethingElse(def);
>     v.push_back(std::move(m));
> 
>   However, in this case it might be worthy of consideration to move such
> initialization to a function, so you would have something like:
> 
>     Movable gimmeAMovable()
>     {
>         Movable m;
>         m.doSomething(abc);
>         m.doSomethingElse(def);
>         return m;
>     }
>     ...
>     v.push_back(gimmeAMovable());
> 
>   This way you don't end up with an "empty" object from which content has
> been moved away.



在 2012年2月26日星期日UTC+8上午3时10分08秒,Juha Nieminen写道:
> bartek szurgot <basz@no.spam> wrote:
> > std::vector<Movable> v;
> > Movable m;
> > v.push_back(m); // error - cannot copy
> > v.push_back( std::move(m) ); // ok - moves object
> 
>   I'm not so sure doing that is such a good "pattern" because after
> giving 'm' to the vector you are left with an "empty"/"null" 'm' which
> has nothing in it (because what it had was moved to the vector).
> 
>   A more sensible "pattern" would be to create a temporary that gets
> destroyed immediately after its contents have been moved to the vector,
> that is:
> 
>     v.push_back(Movable());
> 
>   OTOH, there might be some situations where you need to do it like your
> version, for example like:
> 
>     Movable m;
>     m.doSomething(abc);
>     m.doSomethingElse(def);
>     v.push_back(std::move(m));

I  think here the index of the  moved  m in v should be saved in the next line. But it is possible that  the vector v is used as a stack of the same type of objects.


Back to comp.lang.c++ | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

A question on "uncopyable" that disable copy constructor TH <python152@gmail.com> - 2012-02-22 20:45 -0800
  Re: A question on "uncopyable" that disable copy constructor Ian Collins <ian-news@hotmail.com> - 2012-02-23 18:33 +1300
    Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-23 08:47 +0000
      Re: A question on "uncopyable" that disable copy constructor Ian Collins <ian-news@hotmail.com> - 2012-02-26 08:16 +1300
        Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-25 19:49 +0000
          Re: A question on "uncopyable" that disable copy constructor yatremblay@bel1lin202.(none) (Yannick Tremblay) - 2012-02-27 14:32 +0000
            Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-27 15:54 +0000
              Re: A question on "uncopyable" that disable copy constructor yatremblay@bel1lin202.(none) (Yannick Tremblay) - 2012-02-27 16:15 +0000
                Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-27 20:58 +0000
                Re: A question on "uncopyable" that disable copy constructor Ian Collins <ian-news@hotmail.com> - 2012-02-28 17:18 +1300
                Re: A question on "uncopyable" that disable copy constructor Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2012-02-28 00:00 -0500
                Re: A question on "uncopyable" that disable copy constructor Ian Collins <ian-news@hotmail.com> - 2012-02-28 20:09 +1300
                Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-28 21:19 +0000
                Re: A question on "uncopyable" that disable copy constructor Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2012-03-04 01:05 -0500
                Re: A question on "uncopyable" that disable copy constructor 88888 Dihedral <dihedral88888@googlemail.com> - 2012-03-04 18:01 -0800
                Re: A question on "uncopyable" that disable copy constructor Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-28 22:02 +0000
                Re: A question on "uncopyable" that disable copy constructor Ian Collins <ian-news@hotmail.com> - 2012-02-29 11:15 +1300
  Re: A question on "uncopyable" that disable copy constructor Miles Bader <miles@gnu.org> - 2012-02-23 15:14 +0900
    Re: A question on "uncopyable" that disable copy constructor "T.H." <python152@gmail.com> - 2012-02-23 01:51 -0800
  Re: A question on "uncopyable" that disable copy constructor bartek szurgot <basz@no.spam> - 2012-02-24 17:18 +0100
    Re: A question on "uncopyable" that disable copy constructor Juha Nieminen <nospam@thanks.invalid> - 2012-02-25 19:10 +0000
      Re: A question on "uncopyable" that disable copy constructor Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2012-02-25 17:45 -0500
        Re: A question on "uncopyable" that disable copy constructor Juha Nieminen <nospam@thanks.invalid> - 2012-02-26 09:38 +0000
          Re: A question on "uncopyable" that disable copy constructor Juha Nieminen <nospam@thanks.invalid> - 2012-02-26 09:42 +0000
          Re: A question on "uncopyable" that disable copy constructor Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2012-02-27 23:23 -0500
      Re: A question on "uncopyable" that disable copy constructor 88888 Dihedral <dihedral88888@googlemail.com> - 2012-02-28 17:01 -0800

csiph-web