469,909 Members | 1,683 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,909 developers. It's quick & easy.

Creating containers on the heap

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

Sep 17 '07 #1
3 3329
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.
Sep 17 '07 #2
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
Sep 17 '07 #3
On Sep 17, 1:06 pm, Gianni Mariani <gi3nos...@mariani.wswrote:
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:ja*********@gmail.com
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

Sep 18 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

10 posts views Thread by Sachin Garg | last post: by
4 posts views Thread by Andy Venikov | last post: by
18 posts views Thread by Matthias Kaeppler | last post: by
8 posts views Thread by Ross A. Finlayson | last post: by
19 posts views Thread by AlesD | last post: by
10 posts views Thread by rAinDeEr | last post: by
31 posts views Thread by JoeC | last post: by
13 posts views Thread by Justcallmedrago | last post: by
11 posts views Thread by jimxoch | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.