c++ - How to force reserve() to use a non-default constructor? -


suppose have following code snippet:

mytype::mytype();            // size of mytype.amember default size mytype::mytype(int mysize);  // size of mytype.amember depends on mysize ... ... std::vector<mytype> mytypevector; mytypevector.reserve(numberofobjects);  // memory reserved numberofobjects * sizeof(mytype) ... 

how can 1 make reserve not use default constructor determine size of individual objects, use desired constructor instead?

one can try following:

mytype::mytype();            // size of mytype.amember default size mytype::mytype(int mysize);  // size of mytype.amember depends on mysize ... ... std::vector<mytype> mytypevector(numberofobjects, mytype(desiredsize));  // memory allocated numberofobjects * sizeof(mytype(desiredsize)) ... 

but above calls copy constructor avoid efficiency reasons. hence question.

a type can have 1 size. calling non-default constructor has no effect on size of object. such, there no need you're asking. reserve not , can not use constructor determine size of objects.

your attempt std::vector<mytype> mytypevector(numberofobjects, mytype(desiredsize)); wholly different. constructs numberofobjects number copies of temporary mytype object , therefore must copy. if wanted reserve space objects, mytypevector.reserve(numberofobjects); allocate correct amount of memory.

a vector not contain objects inside itself. if did, never change size. instead, vector contains pointer(s) buffer allocated separately. therefore, capacity or object count of vector has no effect on size of vector object , therefore have no effect on size of object contains vector member.

you cannot reserve memory buffer of vector doesn't exist. said, mytypevector.reserve(numberofobjects); sufficient allocate memory mytype instances , once instances have been constructed, can reserve space member vectors.


Comments

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -