delorie.com/archives/browse.cgi | search |
From: | Nick <jp_prongs AT yahoo DOT com> |
Newsgroups: | comp.os.msdos.djgpp |
Subject: | Re: Vector of Classes issue in GCC 3.1 |
Date: | Wed, 12 Jun 2002 13:13:07 -0400 |
Organization: | MindSpring Enterprises |
Lines: | 28 |
Message-ID: | <3D078123.98D37812@yahoo.com> |
References: | <3cf6c05e_1 AT news DOT iprimus DOT com DOT au> <3cf6d9d1$1_1 AT news DOT iprimus DOT com DOT au> <5P2K8.30975$4f4 DOT 1197748 AT news000 DOT worldonline DOT dk> <5576bd2c DOT 0206111609 DOT 2facd787 AT posting DOT google DOT com> |
NNTP-Posting-Host: | a5.f7.82.37 |
Mime-Version: | 1.0 |
X-Server-Date: | 12 Jun 2002 17:13:27 GMT |
X-Mailer: | Mozilla 4.75 [en] (Win98; U) |
X-Accept-Language: | en |
To: | djgpp AT delorie DOT com |
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
Reply-To: | djgpp AT delorie DOT com |
Let's say you have a class like: class foo { char *a; foo() { a = malloc(100); } ~foo() { free(a); } }; Then doing this: foo *bar = new foo; foo *baz = new foo(bar); delete bar; will cause baz.a to point to a free()d memory block, messing up your program. This is because, by default, baz.a will be the same as bar.a. To fix that, you can use this class: class foo2 { char *a; foo() { a = malloc(100); } foo(foo& orig) { a = malloc(100); memcpy(a, orig.a, 100); } foo& operator=(foo& orig) { memcpy(a, orig.a, 100); } ~foo() { free(a); } }; The foo(foo& orig), the copy constructor, allocates a new block and copies the original object's block to it. The operator= causes statements like "foo baz = bar;" to work OK, by copying the data pointed to by bar.a to baz.a.
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |