Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Objects creating and passing objects to other objects?

Posted on 2001-06-13
7
Medium Priority
?
177 Views
Last Modified: 2010-04-02
I am developing a model in C++.  One of the main sections of the model consists of two objects: nodes and packets.

My packet objects are really just glorified structures storing storing integer data.

The node class includes several public methods to manipulate it, as well as a private STL list member to store packets -- a buffer, if you will.  Nodes can do several things.  The two most important are: 1) storing packets given to it and 2) moving packets from itself to a given node.  They do this using the following methods:

void add_packet(Packet p);
void move_packet(Node destination);

The add_packet method simply adds p to the end of the STL list contained in the node.  It's the move_packet method that is giving me problems.  Originally, I thought I could simply make a copy of packet I wanted to move, add it to the destination node (using add_packet, of course) and then delete the node from the starting list (the list contained in the object handling the message).  However, this did not produce the desired results.

Looking into the bug I found that while I'm in the move_packet method, everything is fine -- the destination node contains what it's supposed to and at the proper time.  However, as soon as I exit the method, the packet object disappears.

I've fooled around with several ways of getting around this, all to no avail.  What am I missing?  IOW, How do I move object A from object 1 to object 2?
0
Comment
Question by:Kaimelar
7 Comments
 
LVL 32

Expert Comment

by:jhance
ID: 6187703
Is there a reason why you've asked this question 3 times?
0
 
LVL 32

Expert Comment

by:jhance
ID: 6187709
OK, make that 4 TIMES!!!
0
 
LVL 32

Expert Comment

by:jhance
ID: 6187719
Please delete the DUPLICATES and get your points back.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:Kaimelar
ID: 6187725
My apologizes for the duplicated questions -- refreshing my browser caused the question to be submitted multiple times.
0
 
LVL 3

Accepted Solution

by:
JackThornton earned 600 total points
ID: 6188905
If the method signature above is correct, I see a potential problem.

If you're passing "Node destination", you're passing a copy of the entire node by value. What you're modifying is the copy, not the original.

What you probably want to do is either "Node &destination" or "Node *pDestination" - that is, pass either a reference or a pointer to the original object. That way your manipulations are occuring on the object you expect them to modify.

- jack
0
 
LVL 3

Expert Comment

by:elcapitan
ID: 6189844
JackThornton is right.
I have 2 guesses regarding your packet class:
1. In the class there are data members that are pointers.
2. you did not implement copy constructor.

When you pass a copy of the object to the method, a shallow copy is been perform by the default copy constructor, i.e. only the VALUE of the pointer is been copy instead of the CONTENT of the pointed address.
So, you can do as JackThornton suggested, which is the right thing to do in most cases, or implement a copy constructor for the class.

--EC--
0
 

Author Comment

by:Kaimelar
ID: 6191338
JackThornton hit the nail on the head -- I'd been so obsessed with the way the method was working I didn't even think about the parameters I was passing into it.  Thanks to everyone who looked at this problem.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
Suggested Courses

572 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question