Home > Backend Development > C++ > body text

How Do You Safely Delete Pointers in a Vector Without Destroying the Objects They Point To?

Patricia Arquette
Release: 2024-10-31 03:51:31
Original
350 people have browsed it

 How Do You Safely Delete Pointers in a Vector Without Destroying the Objects They Point To?

vector::erase(): Deleting Pointers Without Object Destruction

Problem:

A vector of object pointers requires the removal of an element while preserving the object itself. However, concerns arise regarding the potential destruction of the object upon removal.

Answer:

vector::erase() effectively removes elements from a vector and invokes the destructor. However, when dealing with pointers, the destructor does not intervene with the destruction of the actual object. This is because the container does not take ownership of the pointed-to objects.

Solution:

To expunge the pointed-to objects, it is imperative to explicitly employ the delete operator on each pointer. Here's an illustrative code snippet:

<code class="cpp">void clearVectorContents( std::vector <YourClass*> &amp; a ) 
{    
    for ( int i = 0; i < a.size(); i++ ) 
    {       
        delete a[i];    
    }    
    a.clear(); 
} 
Copy after login

Caution:

Storing raw pointers in standard containers is not advised. Instead, consider utilizing boost::shared_ptr to effectively manage resource allocation with pointers.

Elegant Solution:

For a more versatile and efficient approach, implement a functor to delete pointers in the vector. Here's an illustration:

<code class="cpp">// Functor for deleting pointers in vector.
template<class T> class DeleteVector
{
    public:
    // Overloaded () operator.
    // This will be called by for_each() function.
    bool operator()(T x) const
    {
        // Delete pointer.
        delete x;
        return true;
    }
};</code>
Copy after login

Invocating this functor with for_each provides a swift and concise solution:

<code class="cpp">for_each( myclassVector.begin(),myclassVector.end(),
          DeleteVector<myclass*>());</code>
Copy after login

where myclassVector denotes the vector holding pointers to myclass objects.

This strategy ensures that all pointed-to objects are safely eliminated while preserving the integrity of the vector.

The above is the detailed content of How Do You Safely Delete Pointers in a Vector Without Destroying the Objects They Point To?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!