devxlogo

Ensuring Proper Initialization of Template Arguments

Ensuring Proper Initialization of Template Arguments

In the following template member function, the parameter T can be a class or a built-in type:

   void vector< T >::resize (size_type new_size)  {     T val; // oops! What if T is a built-in type?     if (new_size > size())       insert(end(), new_size - size(), val);     else     // ..more stuff  }

This code has a subtle bug. If T happens to be a built-in type, e.g., int, the variable val has a garbage value. On the other hand, if T is a class with a user-defined default constructor, the constructor will be invoked automatically and initialize val. To ensure that val is always properly initialized, regardless of its type, change the first line in resize() to the following:

   T val = T(); // ensure proper initialization

This way, you guarantee that val is zero-initialized if it’s a built-in type. If, however, T is a class, the compiler will call val’s default constructor. Note that for class types, the following declarations are identical:

   T val = T();  T val;

Both ensure that the default constructor is invoked; they differ only when T is a built-in type.

See also  Professionalism Starts in Your Inbox: Keys to Presenting Your Best Self in Email
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist