From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,703c4f68db81387d X-Google-Thread: 109fba,703c4f68db81387d X-Google-Thread: 115aec,703c4f68db81387d X-Google-Thread: f43e6,703c4f68db81387d X-Google-Attributes: gid103376,gid109fba,gid115aec,gidf43e6,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!news.glorb.com!newsread.com!news-xfer.newsread.com!nntp.abs.net!attws2!att542!ip.att.net!newsfeed3.global.lmco.com!svlnews.lmms.lmco.com!not-for-mail From: "REH" Newsgroups: comp.lang.ada,comp.lang.c++,comp.realtime,comp.software-eng Subject: Re: [OT] Re: Teaching new tricks to an old dog (C++ -->Ada) Date: Mon, 28 Mar 2005 15:42:07 -0500 Organization: Earth Message-ID: References: <4229bad9$0$1019$afc38c87@news.optusnet.com.au> <1110032222.447846.167060@g14g2000cwa.googlegroups.com> <871xau9nlh.fsf@insalien.org> <3SjWd.103128$Vf.3969241@news000.worldonline.dk> <87r7iu85lf.fsf@insalien.org> <1110052142.832650@athnrd02> <1lr611thktbau$.1dj95z21h7l5v.dlg@40tude.net> <1112022773.497341@athnrd02> <1112026376.920221@athnrd02> <1112034544.645999@athnrd02> <1112039976.169686@athnrd02> NNTP-Posting-Host: 158.187.64.144 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 Xref: g2news1.google.com comp.lang.ada:10093 comp.lang.c++:47674 comp.realtime:1794 comp.software-eng:5431 Date: 2005-03-28T15:42:07-05:00 List-Id: "Ioannis Vranos" wrote in message news:1112039976.169686@athnrd02... > > I was just pointing out that what you wrote was > > not portable, and would not work for any arbitrary class. Besides, why > > would you incur the extra time and complexity of manually moving the data > > back and forth, byte-by-byte instead of just insuring the correct alignment > > and letting the compiler take care of it? > > > This question can be rephrased to: "Why is memcpy() needed?". > > > > -- No, it is not about whether memcpy() is a necessary function. You purposely over simplified what I did. I don't want to appear rude, but your whole statement about moving a double byte-by-byte to avoid alignment issues is just nonsense. You didn't take portability into account when you wrote the snippets of code using placement new, and now you wish to backpedal. You really are not going to convince me that you intended write all your classes to copy all the bytes of variables with alignment needs greater than one, instead of just fixing the alignment. Do you really expect my to believe you would write: struct foo { foo(double d) : m_dbl(d) {} double get() const { double tmp; memcpy(&tmp, &m_dbl, sizeof(tmp)); return tmp; } private: double m_dbl; } char buf[sizeof(foo)]; foo* pf = new(buf) foo(); double d = pf->get(); instead of: struct foo { foo(double d) : m_dbl(d) {} double get() const {return m_dbl;} private: double m_dbl; } union data_type { double align; char buf[sizeof(foo)]; } data; foo* pf = new(data.buf) foo(); double d = pf->get();