Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #14604
| 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> |
在 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
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