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

A

Aff@n

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=a;
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.
 
I

Ian Collins

Aff@n said:
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=a;
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top