Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Problem in the aggregation concept.(during deletion of the pointer of other class).

Reply
Thread Tools

Problem in the aggregation concept.(during deletion of the pointer of other class).

 
 
Aff@n
Guest
Posts: n/a
 
      10-16-2006
Dear Brothers,
i am facing a problem

class compactdisc
{
char title[20];/string a;
int capacity;

public:

compactdisc();
compactdisc(char [],int);
};

class cd_drive
{
int speed;
char manufact[20];
compactdisc *ptr;

public:
cd_drive();
cd_drive(char [], int ,compactdisc *);
~cd_drive();
};

cd_drive::cd_drive(char a[], int spd ,compactdisc * a);
{
int counter=0;
counter=strlen(a);
for(int i=0;i<counter;i++)
manufact[i]=a[i];
for(int j=counter;j<20;j++)
manufact[j]=0;
ptr=new compactdisc;
ptr=a;

}

************************************************** *
cd_drive::~cd_drive()
{
// how can i write the destructor of this if i write this
statement it gives memory leakage
// what is the reason about this ..is the way of deletion is
incorrect or any thing else

delete ptr;
}


int main()
{
compactdisc c1("programming",700);
compactdisc *c2;
c2=new compactdisc;
cd_drive("microsoft",210,c2);
delete c2;
return 0;
}

Please explain ! and also if any suggestion to make the program
efficient ..

thanks
your Brother.

 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      10-16-2006
Aff@n wrote:
> Dear Brothers,


I'm sure there are some sisters lurking here!

> i am facing a problem
>
> class compactdisc

It's common practice to capitalise the fist letter of a class name.

> {
> char title[20];/string a;


I assume these should have been two lines? Also, why isn't title a
std::string?

> int capacity;
>
> public:
>
> compactdisc();
> compactdisc(char [],int);


Why not use const std::string& as the first parameter?

> };
>
> class cd_drive
> {
> int speed;
> char manufact[20];

Again, why not a std::string?

> compactdisc *ptr;


Not a good choice of name. If this class takes ownership of the
compactdisc object, consider using std::auto_ptr here.
>
> public:
> cd_drive();
> cd_drive(char [], int ,compactdisc *);

Again, why not use const std::string& as the first parameter?

> ~cd_drive();
> };
>
> cd_drive::cd_drive(char a[], int spd ,compactdisc * a);
> {
> int counter=0;
> counter=strlen(a);

Prefer initialiser lists over assignment.

> for(int i=0;i<counter;i++)
> manufact[i]=a[i];
> for(int j=counter;j<20;j++)
> manufact[j]=0;


If you had used std::string, these could have been part of the
initialiser list.

> ptr=new compactdisc;
> ptr=a;


Why have you done this? This leaks the compactdisc object you have just
created.
>
> }
>
> ************************************************** *
> cd_drive::~cd_drive()
> {
> // how can i write the destructor of this if i write this
> statement it gives memory leakage
> // what is the reason about this ..is the way of deletion is
> incorrect or any thing else
>
> delete ptr;


Not required if you use std::auto_ptr.
> }
>
>
> int main()
> {
> compactdisc c1("programming",700);
> compactdisc *c2;
> c2=new compactdisc;


Do these in one line.

> cd_drive("microsoft",210,c2);


Syntax error, where's the variable name?

> delete c2;


You have passed c2 into a cd_drive object that will delete it when it
goes out of scope, so you end up deleting the same object twice. Not a
good idea.

--
Ian Collins.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
JNI and pointer deletion Edsoncv Java 2 04-24-2008 06:36 AM
this pointer - deletion srini4vasan@gmail.com C++ 5 08-09-2007 10:18 AM
Pointer deletion question Marcus C++ 4 02-16-2007 05:52 PM
safe deletion of pointer, trees Christopher Pisz C++ 2 09-04-2004 06:14 AM
Design Problem Aggregation Merlin C++ 4 05-11-2004 04:17 AM



Advertisments