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


Tip of the Day
Language: C++
Expertise: Beginner
Sep 8, 2000

Clarifying a Common Source of Pointer Confusion

Novices, especially those who have experience with garbage-collected languages, are often confused with the concept of object deallocation and destruction in C++. They tend to explicitly invoke every object's destructor or assume that every pointer must be deleted explicitly. However, in C++, there is a simple rule: only objects that were allocated by new must be destroyed using delete. When dealing with arrays allocated by new[], you must use delete[]. When shouldn't you use delete? First of all, when you have local automatic objects and static objects. These objects are destroyed automatically. Never attempt to destroy them explicitly. Furthermore, even if you have a pointer that is later assigned to an object, you shouldn't delete this pointer if its bound object wasn't allocated using new. Here's an example:

 
void f()
{
 string s; // local automatic object
 string *ps;
 ps = &s; // assign address of s to ps
}

Because s is a local automatic object, you shouldn't delete the pointer ps. The bound object s will be destroyed automatically when f() exits. Remember that deleting any object that wasn't allocated using new causes undefined behavior (most likely—a program crash).

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


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

 

 

Sitemap