Skip to content

Instantly share code, notes, and snippets.

@hallfox
Created November 15, 2019 03:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hallfox/67edd86fb3b2bedcb5c654dfab4782da to your computer and use it in GitHub Desktop.
Save hallfox/67edd86fb3b2bedcb5c654dfab4782da to your computer and use it in GitHub Desktop.
An example of how shared_ptr goes the extra mile when you write bad classes
class Base {
public:
Base(size_t len);
~Base();
private:
char* data_;
};
Base::Base(size_t len):
data_(new char[len]) {
std::cout << "Base constructed\n";
}
Base::~Base() {
std::cout << "Base deleted\n";
delete[] data_;
}
class Derived: public Base {
public:
Derived(size_t len);
~Derived();
private:
int* count_;
};
Derived::Derived(size_t len):
Base::Base(len),
count_(new int(0)) {
std::cout << "Derived constructed\n";
}
Derived::~Derived() {
std::cout << "Derived deleted\n";
delete count_;
}
int main() {
// What is printed?
{
std::shared_ptr<Base> sp = std::make_shared<Derived>(16);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment