Code
#include <memory>
#include <vector>
class Pastery {
public:
Pastery(const char* name) : m_Name(name) {}
~Pastery() { delete m_Name; }
private:
const char* m_Name;
};
class Donut : public Pastery {
public:
Donut(int radiusInCm) : Pastery("Donut"), m_RadiusInCm(radiusInCm) {}
private:
int m_RadiusInCm;
};
class Brownie : public Pastery {
public:
Brownie(bool hotCore) : Pastery("Brownie"), m_HotCore(hotCore) {}
private:
bool m_HotCore;
};
int main() {
using namespace std;
unique_ptr<vector<Pastery*>> pastries(new vector<Pastery*>);
pastries->push_back(new Donut(5));
pastries->push_back(new Brownie(true));
return 0;
}
Analysis
$ g++ main.cpp -g
$ gdb a.out
(gdb) b 32
(gdb) r
(gdb) print pastries._M_t->_M_head_impl
$5 = (std::vector<Pastery*, std::allocator<Pastery*> > *) 0x615c20
(gdb) p* (std::vector<Pastery*, std::allocator<Pastery*> > *) 0x615c20
$7 = std::vector of length 2, capacity 2 = {0x615c40, 0x615c80}
(gdb) p* (Donut*) 0x615c40
$8 = {<Pastery> = {m_Name = 0x4019de "Donut"}, m_RadiusInCm = 5}
(gdb) p* (Brownie*) 0x615c80
$10 = {<Pastery> = {m_Name = 0x4019e4 "Brownie"}, m_HotCore = true}
(gdb) q
Info: The used version of Python Pretty-Printer (used by GDB) couldn’t handle ‘print pastries’.