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のオブジェクトと元のオブジェクトは、異なるスタックメモリを指していることがわかります.