Download Deep Copy, Shallow Copy, Clone Assignment and copy in C++

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Integrated circuit wikipedia , lookup

Wire wrap wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

Transcript
Deep Copy, Shallow Copy, Clone
ÿ
Assignment and copy in C++
The default semantics in C++ is copy semantics
ÿ
If copies are expensive (time, memory, development) we can
prevent them
Make copy constructor and assignment operator private,
see hmap.h, for example
What does this do for pointers to objects, copyable?
ÿ
How does this work in C++? Java analog?
Foo a, b;
a.doThis();
b = a;
b.doThis();
// how do a and b compare?
We expect assignment to be a copy, it is for ints and other
assignment/copy operators should mirror this.
vector<string> vs(3,”hello”);
const vector<string> cvs(3,”hello”);
cout << cvs[2] << endl;
cvs[2][0] = ‘j’;
• Repercussions for pointer-based classes?
ÿ
By default C++ supports assignment and copy, but shallow
const Foo& operator = (const Foo& f);
Foo(const Foo& f);
CPS 108
8.1
Copy/Assignment in Java
ÿ
ÿ
8.2
Gates, Wires, OO Design
The default semantics in Java is non-copy for objects, copy for
primitive types
Foo a, b;
a = new Foo();
b = a;
b.doThis();
Suppose we want a copy of a, what do we do?
Java has an interface Cloneable, implementers must have:
public Object clone(){…}
Possible to call Object.clone(), default member
assignment---shallow copy, not deep
Object.clone() is protected, but Cloneable classes must
make clone public
CPS 108
CPS 108
8.3
ÿ
Building circuits from gates. What’s the difference between a
gate and a circuit? What is a circuit?
Composite design pattern used for part-is-a-whole
ÿ
How do we “wire” a circuit, how do signals flow?
Observer/Observable: wire is the observable, gate is the
observer, who notifies whom?
ÿ
Wire creation and cloning: where is it done, who’s responsible?
Factory pattern (WireFactory) and factory method (clone)
What about cloning a composite?
CPS 108
8.4