c++ - Memory leaks when using shared pointers in a vector -



c++ - Memory leaks when using shared pointers in a vector -

i've been facing problem memory leaks when adding shared pointer vector, vector defined follows:

vector<shared_ptr<recipe>> favorites;

(recipe simple class 2 simple fields)

and next function used add together recipe user's favorites:

void user::postrecipe(string recipename) { if (!(*this).isconnected()) throw usernotconnectedexception(); if (!(*this).isingroup()) throw notingroupexception(); shared_ptr<user> owner = server->seekuser((*this).getid()); shared_ptr<recipe> recipe(new recipe(recipename, owner)); server->postrecipe((*this).groupname, recipe); if (!checkifrecipeinfavs(favorites, recipename)) { favorites.push_back(recipe); }

although programme compiles , output of programme desired, lastly line of functions seems cause memory leak , error disappears if removed.

any ideas? in advance.

recipe.h:

class recipe { string name; shared_ptr<user> owner; public: recipe(string name, shared_ptr<user> owner):name(name),owner(owner){}; ~recipe(){}; string getname(); shared_ptr<user> getowner(); };

recipe.cpp:

string recipe::getname(){ homecoming name; } shared_ptr<user> recipe::getowner(){ homecoming owner; }

when store owner in recipe using shared pointer, create cyclic reference, meaning, recipe deleted when user deleted, user deleted when recipes deleted. should utilize weak_ptr in recipe break cycle.

this because shared_ptr uses simple reference counting determine when should delete pointee: whenever re-create shared_ptr, reference count (kept on heap, alongside pointee object) incrementented, , whenever re-create gets destroyed, count decremented. pointer sees count reach 0 in destructor delete object. when 2 shared_ptrs reference each other, count never fall below two.

c++ vector memory-leaks shared-ptr

Comments

Popular posts from this blog

php - Android app custom user registration and login with cookie using facebook sdk -

django - Access session in user model .save() -

php - .htaccess Multiple Rewrite Rules / Prioritizing -