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
Language: C++
Expertise: Intermediate
Jun 26, 2000

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


Invariants in C++

The notion of invariants was introduced nearly 30 years ago. In essence, an invariant is the property that makes the state of an object well-defined. Usually, the invariant of a class is achieved by executing its constructor. A program assumes that an object's invariant holds true once the object has been fully constructed, as long as it hasn't been destroyed. In other words, when you call an object's member function, you assume that the object is in a well-defined state without having to check its state every time. Let's look at a concrete example, a string class. You can initialize a string object in several ways, e.g., by invoking its default constructor, as in:

 
 std::string s;

or by initializing it with another string object:

 
 std::string s1(s2);

From this moment on, you can use the string object safely, knowing it's in a well-defined state, e.g., it doesn't hold a dangling pointer or a null pointer, and that its member functions perform the desired operations.

Designing a class usually consists of defining an invariant that is simple enough to express in terms of a constructor. Note that C++ defines other invariants: a reference variable, for instance, is always bound to a valid object; unlike a pointer, you don't have to check whether it's null nor do you have to release it. Likewise, the stream objects cin and cout are created before the program's outset without necessitating any assistance from the user.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


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

 

 

Sitemap
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date