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

KRPano, I am seeking an expert to create a 360 degree virtual tour in KRPan...

I am seeking an expert to create a 360 degree virtual tour in KRPano for use on PCs, tablets and smartphones. You will be given with panoramas in order to create an advanced KRPano

Develop libcurl xml project, Develop libcurl XML project I have a Projec...

Develop libcurl XML project I have a Project using XML with C++. You will use things like LIbcurl etc....and a XML parser to finish the project. Developer must know how to use X

Recursive function, Write a recursive function recursiveMin that takes an i...

Write a recursive function recursiveMin that takes an integer array, a starting subscript and an ending subscript as arguments, and returns the smallest element in the array. The

A program that divides the screen into n vertical bars, Write a function th...

Write a function that takes in a number n and divides the screen into n vertical bars, alternating black and white. (What should you do if someone puts in n=0 or n=-99?)

Program, Write a ‘C’ program to accept any 3 digit integer number from the ...

Write a ‘C’ program to accept any 3 digit integer number from the keyboard and display the word equivalent representation of the given number.

When i develop a destructor, When I develop a destructor, do I require to e...

When I develop a destructor, do I require to explicitly call the destructors for my member objects?

Coding, Problem Statement: You have to write a C program to develop a Car P...

Problem Statement: You have to write a C program to develop a Car Parking Management System for a busy commercial area. The system will record the car plate number, date and time w

Integral, Write a program to find the area under the curve y = f(x) between...

Write a program to find the area under the curve y = f(x) between x = a and x = b, integrate y = f(x) between the limits of a and b. The area under a curve between two points can b

What is the use of pear in php, What is the use of PEAR in php? PEAR is...

What is the use of PEAR in php? PEAR is termed as PHP Extension and Application Repository. It provides structured library to PHP users and also gives provision for package mai

C++ coursework programming for engineering, Hi there I am looking for hel...

Hi there I am looking for help with c++ coursework. Could you please provide me with email address to email a copy of it. Thanks

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