Skip to content

Instantly share code, notes, and snippets.

@kkabdol
Last active January 16, 2017 10:07
Show Gist options
  • Select an option

  • Save kkabdol/3172d58c5dedddbef58d366c544d93c3 to your computer and use it in GitHub Desktop.

Select an option

Save kkabdol/3172d58c5dedddbef58d366c544d93c3 to your computer and use it in GitHub Desktop.
Smart Pointers
#include <iostream>
#include <memory>
using namespace std;
class MusicProduct {
public:
MusicProduct() {}
virtual void play() const = 0;
virtual void displayTitle() const = 0;
};
class Cassette : public MusicProduct {
public:
Cassette() {}
virtual void play() const { cout << "Play a cassette." << endl; }
virtual void displayTitle() const { cout << "Display a cassette." << endl; }
};
class CD : public MusicProduct {
public:
CD() {}
virtual void play() const { cout << "Play a CD." << endl; }
virtual void displayTitle() const { cout << "Display a CD." << endl; }
};
class Bluelay {
public:
Bluelay() {}
virtual void play() const { cout << "Play a Bluelay." << endl; }
virtual void displayTitle() const { cout << "Display a Bluelay." << endl; }
};
void displayAndPlay(const shared_ptr<MusicProduct>& pmp, int numTimes) {
for ( int i = 1; i <= numTimes; ++ i )
{
pmp.get()->displayTitle();
pmp.get()->play();
}
}
int main() {
auto funMusic = std::make_shared<Cassette>();
auto nightmareMusic = std::make_shared<CD>();
auto playstation4 = std::make_shared<Bluelay>();
auto anotherFunMusic = funMusic;
displayAndPlay( funMusic, 10 );
displayAndPlay( nightmareMusic, 0);
// displayAndPlay( playstation4, 0); // compile error
cout << funMusic.use_count() << endl;
cout << anotherFunMusic.use_count() << endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment