C++C++11C++14C++17C++20Learn C++

What Is An Eligible Move Constructor In Modern C++?

What Is An Eligible Move Constructor In Modern C++

The object-oriented programming features of modern C++ is really enhanced with many features, such as Classes, Objects, constructors, move constructors, copy constructors, destructors, etc. Since the C++11 standard was released one of the modern programming features is the move constructor that allows you to move the resources from one object to another object without copying them. One of the move constructors is the Eligible Move Constructor and, in this post, we explain what is an eligible move constructor in modern C++.

What are classes and objects in modern C++?

Classes are defined in C++ using the keyword class followed by the name of the class. Classes are the blueprint for the objects. They are user-defined data types that we can use in our program, and they work as an object constructor. Objects are an instantiation of a class. In C++ programming, most of the commands are associated with classes and objects, along with their attributes and methods. Here is a simple class example below,

Then we can create our objects with this Type of myclass as below.

Now, let’s see what is move constructor.

What is a move constructor in modern C++?

The move constructor is a constructor that allows you to move the resources from one object to another object without copying them. In other words, the move constructor allows you to move the resources from an rvalue object into an lvalue object.

The move constructor is used to move data of one object to the new one, it is a kind of to make a new pointer to the members of an old object and transfers the resources to the heap memory. When you move a member, if the data member is a pointer, you should also set the value of the member of the old object to a NULL value. When you use the move constructor, you don’t use unnecessary data copying in the memory. This allows you to create objects faster. Mostly, if your class/object has a move constructor, you can use other move methods of other features of C++, for example, std::vector, std::array, std::map, etc. For example, you can create a vector with your class type then you can use the push_back() method that runs your move constructor.

Here is the most common syntax for the move constructor in C++ (Since C++11),

this general syntax is also a syntax for the “Typical declaration of a move constructor” as in below,

What is an eligible move constructor in modern C++?

Since C++11, the Eligible Move Constructor is a Move Constructor which is eligible if it is not deleted. This definition is changed after C++20, the Eligible Move Constructor is a Move Constructor which is eligible if it is not deleted, if it has any associated constraints that are satisfied, if it has no move constructor with the same first parameter type is more constrained.

Until C++20, the move constructor is eligible:

  • if it is not deleted

Since C++20, the move constructor is eligible:

  • if it is not deleted,
  • and if it has any associated constraints that are satisfied
  • and it has no move constructor with the same first parameter type that is more constrained.

In modern C++ programming, the triviality of eligible move constructors is important because it determines whether the class is a trivially copyable type and whether the class is an implicit-lifetime type.

Is there a simple example of an eligible move constructor in modern C++?

In modern C++ example, this simple Tx class has a move constructor.

This class has an eligible move constructor because it has a default move constructor that compiler automatically defines, in Modern C++ it is similar as below.

Now, we can define a new Ty class and we can use one of Tx classes above as a base class here.

This new Ty class above has an eligible move constructor from Tx class. Because it is not deleted in base class or in this class.

Is there a full example of an eligible move constructor in modern C++?

Here is a full example that uses an eligible move constructor from a simple class from a class with a base class, and from a template class.

Here is a full example that uses an eligible move constructor from a class with a base class.

Here is a full example that uses eligible move constructor from a template class.

If you need more technical details about the move constructor, it is explained by Bjarne Stroustrup and Lawrence Crowlcan in this publication here; https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html

What Is An Eligible Move Constructor In Modern C++ C++ Builder logo

C++ Builder is the easiest and fastest C and C++ IDE for building simple or professional applications on the Windows, MacOS, iOS & Android operating systems. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for cross-platform UIs.

There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise version.

Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome C++ content in your inbox, every day.

We don’t spam! Read our privacy policy for more info.

About author

Dr. Yilmaz Yoru has 35+ years of coding with more than 30+ programming languages, mostly C++ on Windows, Android, Mac-OS, iOS, Linux, and some other operating systems. He graduated and received his MSc and PhD degrees from the Department of Mechanical Engineering of Eskisehir Osmangazi University. He is the founder and CEO of ESENJA LLC Company. His interests are Programming, Thermodynamics, Fluid Mechanics, Artificial Intelligence, 2D & 3D Designs, and high-end innovations.
Related posts
C++C++17Language FeatureLearn C++

How To Use Skia Images in C++ Builder?

C++C++17Code SnippetGame DevelopmentLanguage FeatureLearn C++

What Is Skia In Modern C++?

C++C++17Learn C++

How To Use Skia in C++ Builder 12?

C++C++17C++20Introduction to C++Language FeatureLearn C++Syntax

Learn How To Use Clamp (std::clamp) In Modern C++ 17 and Beyond