473,405 Members | 2,445 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

Class Question

Sorry about the newbie question. If a class contains a pointer to some
data, and memory is allocated to that pointer in the constructor.
Naturally the destructor should free that memory, right? So since C++ is
by default call-by-value, if you pass that class as an arguement to a
function a copy of the class will be made however a copy of the data
isn't. Thus when the function reaches its end, the class destructor will
be called thus destroying the data. However the original object still
exists and when it trys to reference the data an error will result. So
finally, my question is appart from passing the class as a reference
arguement or pointer is there anything that can be done to prevent this?

Thanks,
Charles

Jul 19 '05 #1
2 2756
Charles Keepax wrote:
Sorry about the newbie question. If a class contains a pointer to some
data, and memory is allocated to that pointer in the constructor.
Naturally the destructor should free that memory, right?
Yes.
So since C++
is by default call-by-value, if you pass that class as an arguement to
a function a copy of the class will be made however a copy of the data
isn't.
If you call-by-value, the object is copied, but the data is not part of
the object. The pointer is, and so the pointer will be copied, but not
the data it points to.
Thus when the function reaches its end, the class destructor
will be called thus destroying the data. However the original object
still exists and when it trys to reference the data an error will
result.
Exactly.
So finally, my question is appart from passing the class as a
reference arguement or pointer is there anything that can be done to
prevent this?


Yes, follow the "Rule of Three": If your class needs one of a copy
constructor, assignment operator or destructor, it probably needs all
three of them.
IOW, just write your own copy constructor and assignment operator that
do the necessary allocation and copying of the data your pointer points
to. Alternatively, you could use reference counting, i.e. you count how
many objects have a pointer to the same data, and only deallocate the
memory when the last object is destroyed.
Jul 19 '05 #2
Thanks.

Charles

Rolf Magnus wrote:
Charles Keepax wrote:

Sorry about the newbie question. If a class contains a pointer to some
data, and memory is allocated to that pointer in the constructor.
Naturally the destructor should free that memory, right?

Yes.

So since C++
is by default call-by-value, if you pass that class as an arguement to
a function a copy of the class will be made however a copy of the data
isn't.

If you call-by-value, the object is copied, but the data is not part of
the object. The pointer is, and so the pointer will be copied, but not
the data it points to.

Thus when the function reaches its end, the class destructor
will be called thus destroying the data. However the original object
still exists and when it trys to reference the data an error will
result.

Exactly.

So finally, my question is appart from passing the class as a
reference arguement or pointer is there anything that can be done to
prevent this?

Yes, follow the "Rule of Three": If your class needs one of a copy
constructor, assignment operator or destructor, it probably needs all
three of them.
IOW, just write your own copy constructor and assignment operator that
do the necessary allocation and copying of the data your pointer points
to. Alternatively, you could use reference counting, i.e. you count how
many objects have a pointer to the same data, and only deallocate the
memory when the last object is destroyed.


Jul 19 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

8
by: Bryan Parkoff | last post by:
I find an interesting issue that one base class has only one copy for each derived class. It looks like that one base class will be copied into three base classes while derived class from base...
20
by: modemer | last post by:
Question is as in subject. For example: class BaseClass { public: void func() { do something; } // I don't want this function being overloaded in its inherited class };
1
by: Alfonso Morra | last post by:
if I have a class template declared as ff: (BTW is this a partial specialization? - I think it is) template <typename T1, myenum_1 e1=OK, my_enum_2=NONE> class A { public: A(); virtual...
21
by: Jon Slaughter | last post by:
I have a class that is basicaly duplicated throughout several files with only members names changing according to the class name yet with virtually the exact same coding going on. e.g. class...
0
by: Sebastian Hiller | last post by:
Hello, i'm new to .Net (i'm using VB as language and i'm working in the code-behind mode) and i can't solve the following problem: I have a WebForm and want to Add a UserControl...
6
by: rodchar | last post by:
Hey all, I'm trying to understand Master/Detail concepts in VB.NET. If I do a data adapter fill for both customer and orders from Northwind where should that dataset live? What client is...
2
by: Chris Puncher | last post by:
Hi. I have a RCW class that was generated by the VS.NET2003 IDE when I added a COM dll reference to my project. This all works fine when I call methods on it. My initial problem is that in...
9
by: needin4mation | last post by:
I have a .aspx file and it's src. I also have a third file, a class that the src references. Everything is in the same directory/folder. Everything has the same namespace. How do I reference the...
43
by: Tony | last post by:
I'm working with GUI messaging and note that MFC encapsulates the message loop inside of a C++ class member function. Is this somehow inherently less robust than calling the message loop functions...
2
by: K Viltersten | last post by:
Suppose there is the following class structure. class S {...} class A : S {...} class B : S {...} class A1 : A {void m(){...}} class B1 : B {void m(){...}} class B2 : B {...} Just to clarify...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.