[comp.lang.c++] Destructors and arrays

matthew@cs.ua.oz.au (Matthew Donaldson) (08/03/90)

I have had some rather strange behaviour from AT&T C++ 2.0 when dynamically
allocating and freeing arrays of classes.  When newing an array of
classes, the constructor is called for each element created, but when
deleteing the array, only one destructor is called.  Everything works
as expected, however, if I declare an array on the stack.

Here is the code I used:

class X
{
public:
 X() { puts("Construct"); }
 ~X(){ puts("Destruct"); }
};

main()
{
 X *Ar= new X[10];
 delete Ar;
}


( Prints 10 "Construct" and 1 "Destruct" )

If I replace main with:

main()
{
 X Ar[10];
}

I get 10 "construct" and 10 "destruct".

Is this the way it is supposed to work, or am I doing something wrong?

	Thanks in advance,
				Matthew

--
-------
Matthew Donaldson
matthew@cs.ua.oz.au
Operating Systems Group
Computer Science Department
University of Adelaide

ark@alice.UUCP (Andrew Koenig) (08/04/90)

In article <MATTHEW.90Aug3233620@chook.ua.oz.au>, matthew@cs.ua.oz.au (Matthew Donaldson) writes:

> Here is the code I used:

> main()
> {
>  X *Ar= new X[10];
>  delete Ar;
> }

You should say

	X *Ar = new X[10];
	delete[10] Ar;

With cfront 2.1, you can say

	delete[] Ar;

but the brackets are still essential.
-- 
				--Andrew Koenig
				  ark@europa.att.com

burley@world.std.com (James C Burley) (08/05/90)

I don't program in c++ yet, but based on postings I've seen on these
boards, try saying "delete [10] Ar;" or "delete [] Ar;".  You might
get your 10 destructions that way!

        tq vm, (burley)

P.S. Tried sending this as email, but it got returned.  At least if I'm
wrong in public, somebody'll correct me!