This program's output is missing the intended values for name and Some string.
Name: , Age: 4, Some string:
Name: , Age: 3, Some string:
If I dynamically allocate memory for each item for myVector in Source.cpp then it works out okay. I'm just wondering why this works out as it does, and what mistakes I have made.
Worth noting is I'm using Visual Studio 2015 C++ compiler.
Parent.h
#pragma once
#include <string>
class Parent
{
public:
    explicit Parent(std::string name, int age)
        : m_name(name), m_age(age) {};
    virtual const std::string toString() const
    {
        return "Name: " + m_name + ", Age: " + std::to_string(m_age);
    }
private:
    std::string m_name;
    int m_age;
};
Child.h
#pragma once
#include "Parent.h"
class Child : public Parent
{
public:
    explicit Child(std::string name, int age, std::string someString)
        : Parent(name, age), m_someString(someString) {};
    virtual const std::string toString() const
    {
        return Parent::toString() + ", Some string: " + m_someString;
    }
private:
    std::string m_someString;
};
Source.cpp
#include <vector>
#include <iostream>
#include "Parent.h"
#include "Child.h"
int main()
{
    std::vector<Parent*> myVector;
    myVector.push_back(&Child("Foo", 4, "Test"));
    myVector.push_back(&Child("Bar", 3, "Test"));
    for (auto p : myVector)
    {
        std::cout << p->toString() << std::endl;
    }
    return 0;
}
 
     
     
    