Creating containers on the heap

Discussion in 'C++' started by DaveJ, Sep 17, 2007.

  1. DaveJ

    DaveJ Guest

    Hi,

    This is quite a simple question (hopefully).

    If I create a vector (on any container) on the heap e.g.
    std::vector<std::string> * m_VectorOfStrings = new
    vector<std::string>;

    I know that the vector itself will be placed on the heap, but if I
    just add strings to it such as:
    m_VectorOfStrings.push_back("mystring1");

    Will the string also be stored on the heap? Or do I need to create a
    string with the new operator as well?
    I assummed that any data stored inside a container on the heap would
    also be stored on the heap, but just wanted to clarify this.


    Thanks
     
    DaveJ, Sep 17, 2007
    #1
    1. Advertising

  2. DaveJ wrote:
    > Hi,
    >
    > This is quite a simple question (hopefully).
    >
    > If I create a vector (on any container) on the heap e.g.
    > std::vector<std::string> * m_VectorOfStrings = new
    > vector<std::string>;
    >
    > I know that the vector itself will be placed on the heap, but if I
    > just add strings to it such as:
    > m_VectorOfStrings.push_back("mystring1");
    >
    > Will the string also be stored on the heap? Or do I need to create a
    > string with the new operator as well?


    The string will be allocated using the default allocator for
    std::basic_string, which more than likely uses heap.

    > I assummed that any data stored inside a container on the heap would
    > also be stored on the heap, but just wanted to clarify this.


    They are independant.
     
    Gianni Mariani, Sep 17, 2007
    #2
    1. Advertising

  3. On 2007-09-17 12:50, DaveJ wrote:
    > Hi,
    >
    > This is quite a simple question (hopefully).
    >
    > If I create a vector (on any container) on the heap e.g.
    > std::vector<std::string> * m_VectorOfStrings = new
    > vector<std::string>;
    >
    > I know that the vector itself will be placed on the heap, but if I
    > just add strings to it such as:
    > m_VectorOfStrings.push_back("mystring1");


    > Will the string also be stored on the heap?


    The string will be on the heap.

    > Or do I need to create a string with the new operator as well?


    Only if you declared m_VectorOfStrings as std::vector<std::string*>*
    i.e. a pointer to a vector of pointers to strings.

    > I assummed that any data stored inside a container on the heap would
    > also be stored on the heap, but just wanted to clarify this.


    Unless you do some funny business with allocators all elements in the
    standard containers will be on the heap, regardless if the container is
    on the heap or not.

    --
    Erik Wikström
     
    =?ISO-8859-1?Q?Erik_Wikstr=F6m?=, Sep 17, 2007
    #3
  4. DaveJ

    James Kanze Guest

    On Sep 17, 1:06 pm, Gianni Mariani <> wrote:
    > DaveJ wrote:
    > > This is quite a simple question (hopefully).


    > > If I create a vector (on any container) on the heap e.g.
    > > std::vector<std::string> * m_VectorOfStrings = new
    > > vector<std::string>;


    > > I know that the vector itself will be placed on the heap, but if I
    > > just add strings to it such as:
    > > m_VectorOfStrings.push_back("mystring1");


    Note that this whould be:
    m_VectorOfStrings->push_back("mystring1");
    (I can't quite see why one would ever allocate a vector member
    dynamically, however.)

    > > Will the string also be stored on the heap? Or do I need to create a
    > > string with the new operator as well?


    > The string will be allocated using the default allocator for
    > std::basic_string, which more than likely uses heap.


    The strings themselves will be allocated using the allocator of
    the vector (which by default uses global operator new). Any
    additional dynamic memory needed by the string will be allocated
    by the allocator of string.

    > > I assummed that any data stored inside a container on the
    > > heap would also be stored on the heap, but just wanted to
    > > clarify this.


    > They are independant.


    More to the point, of course: the container manages any memory
    it might need. It's not really your problem, unless you want to
    play around with allocators.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Sep 18, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sachin Garg
    Replies:
    10
    Views:
    762
    Buster
    Sep 20, 2004
  2. Replies:
    7
    Views:
    556
    Pete Becker
    Jan 25, 2008
  3. Michal Slocinski

    Heap dump file size vs heap size

    Michal Slocinski, Mar 25, 2008, in forum: Java
    Replies:
    1
    Views:
    741
    GArlington
    Mar 25, 2008
  4. viki
    Replies:
    6
    Views:
    568
    Erik Wikström
    Jun 28, 2008
  5. Sebastian Mach
    Replies:
    5
    Views:
    318
Loading...

Share This Page