dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: All
Jan 28, 2000

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


Preventing the Creation of Temporary Objects

The compiler inserts temporary objects "behind your back" in several contexts. For time critical applications, the overhead of a temporary can be quite significant because both the constructor and the destructor of each temporary object must be invoked. Fortunately, you can prevent the creation of a temporary object in most cases, thereby minimizing its incurred performance overhead. Here's a concrete example. In the following snippet, a temporary is created:

 
  Complex x, y, z;
  x = y+z; // assignment; temporary generated here

The expression y+z; results in a temporary object of type Complex that stores the result of the addition. The temporary is then assigned to x and destroyed subsequently. The generation of the temporary object can be avoided in two ways:

 
  Complex y,z;
  Complex x = y+z; // initialization instead of assignment

In the example above, the result of adding x and z is constructed directly into the object x, thereby eliminating the need for an intermediary temporary. Alternatively, you can use += instead of + to get the same effect:

 
  // the following 2 lines are equivalent to: x = y+z;
  x =y; // assignmnet
  x+=z; // no temporary here

Although the form that uses += is less elegant, it costs only two member function calls: assignment operator and operator +=. In contrast, the use of + results in three member function calls: constructor call for the temporary, copy constructor for x, and a destructor call for the temporary.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date