I know that std::vector::push_back() puts a copy in the vector.  I am looking for a way or a std container which does not destroy the class members of an instantiated class.
I have a class, WindowsWindow with members,
private:
    GLFWwindow* m_pGLFWwindow = nullptr;
    EventHandler m_eventHandler;
    VertexArrayObject m_VAO;
    bool m_windowAvailable = true;
    std::uint8_t m_windowNumber = 0;
    std::string m_windowTitle = "";
Two of those members, viz., EventHandler, VertexArrayObject, are classes which themselves contain members which are classes.
When I std::vector::push_back() an instantiation of a WindowsWindow object into or onto a std::vector, all of the class member variables are destroyed since a copy is being made and then destroyed.  Maybe the answer is to make a deep copy constructor for each class, which I have not tried.
I also tried,
std::vector<std::shared_ptr<WindowsWindow>> WindowsWindowVector;
std::shared_ptr<WindowsWindow> pmainWindow = std::make_shared<WindowsWindow>("Main Window", false);
...
WindowsWindowVector.push_back(pmainWindow);
Which fared no better.
- Is there a std container I might employ which does not make, store and destroy copies of the elements being added? 
- Would a deep copy constructor for each class in question solve the problem? 
- Would a standard "C" style array work? 
I have gotten into the habit of using std::vector in place of the "C" style array for non-class objects so this is all a new experience.
 
    