C++学習ノートのdeepcopy
2016 ワード
#include
class Tricycle
{
public:
Tricycle(); // default constructor
Tricycle(const Tricycle&); // copy constructor
~Tricycle(); // destructor
int getSpeed() const { return *speed; }
void setSpeed(int newSpeed) { *speed = newSpeed; }
void pedal();
void brake();
private:
int *speed;
};
Tricycle::Tricycle()
{
speed = new int;
*speed = 5;
}
Tricycle::Tricycle(const Tricycle& rhs)
{
speed = new int;
*speed = rhs.getSpeed();
}
Tricycle::~Tricycle()
{
delete speed;
speed = NULL;
}
void Tricycle::pedal()
{
setSpeed(*speed + 1);
std::cout << "
Pedaling " << getSpeed() << " mph
";
}
void Tricycle::brake()
{
setSpeed(*speed - 1);
std::cout << "
Pedaling " << getSpeed() << " mph
";
}
int main()
{
std::cout << "Creating trike named wichita ...";
Tricycle wichita;
wichita.pedal();
std::cout << "Creating trike named dallas ...
";
Tricycle dallas(wichita);
std::cout << "wichita's speed: " << wichita.getSpeed() << "
";
std::cout << "dallas's speed: " << dallas.getSpeed() << "
";
std::cout << "setting wichita to 10 ...
";
wichita.setSpeed(10);
std::cout << "wichita's speed: " << wichita.getSpeed() << "
";
std::cout << "dallas's speed: " << dallas.getSpeed() << "
";
dallas.setSpeed(9);
std::cout << "wichita's speed: " << wichita.getSpeed() << "
";
std::cout << "dallas's speed: " << dallas.getSpeed() << "
";
return 0;
}
deepcopyのオブジェクトと元のオブジェクトは、異なるスタックメモリを指していることがわかります.