# C++ how to avoid calling destructor

This topic is 1991 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi, I've got code like this :

std::vector<some_class> array;

void pushback_function()
{
some_class temp;
array.push_back(temp);
}


Is it somehow possible to avoid calling destructor of temp

##### Share on other sites
Not really. Why don't you want the destructor called?

If you are trying to save the copy, you can look into C++11's move semantics.

##### Share on other sites

Every object that is created needs to be destroyed.  There is a very tiny exception to the rule and that is if you are basically writing your own memory manager.  But I doubt that is the case here.

What are you trying to accomplish?  Why don't you want your destructor to get called?

##### Share on other sites
ok... so... is it possible to push_back pointer to "temp" (create temp using some_class *temp = new some_class;) in array? Edited by Aroidzap

##### Share on other sites
Perhaps push the memory contained within an std::tr1::shared_ptr onto the vector but set it's deleter function to a function that does nothing.

array.push(std::tr1::shared_ptr<some_class>(new temp(), std::tr1::bind(std::tr1::placeholders::_1, nullFunc));

...

void nullFunc(some_class* unused)
{
// do nothing...
}



##### Share on other sites

I think I will try to solve my problem another way... I don't want to make it messy. But thanks for help ;)

##### Share on other sites
Whoever decreased my rep, I am hoping you did so for the nullFunc stuff rather than the std::tr1::shared_ptr because although that looks messy, it is pretty standard C++.

##### Share on other sites
There are many things you could do, like having a container of pointers, a container of smart pointers or a Boost pointer container. But unless we know what you are trying to do and why it is a problem that the destructor is being called, we can't really give you much advice.

##### Share on other sites

Whoever decreased my rep, I am hoping you did so for the nullFunc stuff rather than the std::tr1::shared_ptr because although that looks messy, it is pretty standard C++.

It's probably because of the misspelled "its".

##### Share on other sites

ok... so... is it possible to push_back pointer to "temp" (create temp using some_class *temp = new some_class;) in array?

Sure, you can create a std::vector<some_class *>, and then push pointers into it instead. Just remember to delete each one when you are actually done with it.

You can also use std::shared_ptr, or (from C++11 onwards) std::unique_ptr, to avoid having to remember to delete the objects in the end.

But I'm curious: how much work is this destructor doing, that you are so adamant to avoid calling it? In general, a copyable class should do very little work in its destructor (and if your class isn't meant to be copyable, well, then you need to take the pointer approach to start with).

1. 1
2. 2
Rutin
19
3. 3
JoeJ
16
4. 4
5. 5

• 36
• 23
• 13
• 13
• 17
• ### Forum Statistics

• Total Topics
631703
• Total Posts
3001814
×