Should my constructors employ"assignment"or"initialization, C/C++ Programming

Assignment Help:

Should my constructors employ "assignment" or "initialization lists"?

 

 


Related Discussions:- Should my constructors employ"assignment"or"initialization

C program for merge two strings , v\:* {behavior:url(#default#VML);} o\:* ...

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0

Decodethecode, 6999066263304447777077766622337778 -----> message sent by th...

6999066263304447777077766622337778 -----> message sent by the first smuggler. my name is robert---------> message decoded by the second smuggler. Where ‘0’ denotes the "space".

What are the different steps in executing a c program, Question 1 What are...

Question 1 What are the different steps in executing a C program? Explain Question 2 What are the commonly used input/output functions in C? How are they accessed?

Verifone pos offline mod vx670, Verifone pos offline mod vx670 Project D...

Verifone pos offline mod vx670 Project Description: I want a programmer who will build custom application for Offline VX670 to collect and save info+pin 1) Press the am

Explain the macros, Explain the Macros? Preprocessor' is a translation ...

Explain the Macros? Preprocessor' is a translation stage that is applied to your source code before the compiler proper gets its hands on it. Usually the preprocessor performs

Demostrate java and c client server exchaniging, Task 1 Demonstrate a J...

Task 1 Demonstrate a Java client and server exchanging one text message in each direction. Task 2 Demonstrate a C client and server exchanging one text message in each

Masm procedure to perform letter case conversion, Assignment:  write a C pr...

Assignment:  write a C program and a MASM procedure.  The C program calls the MASM procedure to perform letter case conversion. Text sections covered:  12.1 to 12.3.1 Write a

C programming language, write an algorithm that reads a postive integer n a...

write an algorithm that reads a postive integer n and then finds and prints the sum of all integers between 1 and n (inclusive) that are disvisible by 7. please write this using c

Flow chart, given number is prime or not

given number is prime or not

Input and output routines, Data is required to be fed into the program (inp...

Data is required to be fed into the program (input) and sent out of the program (output). Considering the draughtsman using a CAD station, the input is his commands to cause lines/

3/15/2013 6:01:10 AM

A: Initialization lists. Actually constructors must initialize as a rule all member objects in the initialization list. One exception is discussed further down.

Suppose the following constructor which initializes member object x_ by using an initialization list: Fred::Fred() : x_(whatever) { }. The most common benefit of doing this is improved performance. For instance, if the expression whatever is the same kind as member variable x_, the result of the expression is directly constructed inside x_ the compiler does not make a separate copy of the object. Though the types are not the same, typically the compiler is able to do a better job with initialization lists than with assignments.

The other (inefficient) way to build constructors is through assignment, like: Fred::Fred() { x_ = whatever; }. In this particular case the expression whatever causes a separate, temporary object to be developed, and this temporary object is passed into the x_ object''s assignment operator. Then that temporary object is destructed at the;. That''s incompetent.

As if that wasn''t bad sufficient, there''s another source of inefficiency while using assignment in a constructor: the member object will get completely constructed by its default constructor, and this might, for instance, allocate some  of the default amount of memory or open some default file. All of this work could be for naught if the whatever expression and/or assignment operator causes the object to shut that file and/or release that memory (for example if the default constructor didn''t allocate a large sufficient pool of memory or if it opened wrong file).

Conclusion: All of other things being equal, your code will run faster if you use initialization lists instead of assignment.

Note: There is no performance difference if the kind of x_ is some built-in/intrinsic type, like int or char* or float. However even in these cases, in according to me preference should be to set those data members in the initialization list instead of via assignment for consistency. Another symmetry argument in favor of by initialization lists even for built-in/intrinsic types: non-static const & non- static reference data members can''t be assigned a value in the constructor, thus for symmetry it makes sense to initialize everything in the initialization list.

For the exceptions now every rule has exceptions and there are a couple of exceptions to the "use initialization lists" rule. Bottom line is to employ common sense: if it''s cheaper, better, faster, etc. to not use them, then by every means, don''t use them. It might happen while your class has two constructors that require initializing the object''s data members in distinct orders. Or it might happen while two data members are self-referential. Or while a data- member require a reference to the this object, and you wished to ignore a compiler warning regarding using the keyword prior to the {that start the constructor''s body (while your specific compiler happens to issue that specific warning). Or while you require to do an if/throw test on a variable ( global, parameter etc.) prior to via that variable to initialize one of your this members. This list is not exhaustive

 

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd