devxlogo

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.

Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.

See also  How Seasoned Architects Evaluate New Tech

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.