Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 181047
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T14:41:34+00:00 2026-05-11T14:41:34+00:00

What are some ways you can shoot yourself in the foot when using boost::shared_ptr

  • 0

What are some ways you can shoot yourself in the foot when using boost::shared_ptr? In other words, what pitfalls do I have to avoid when I use boost::shared_ptr?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T14:41:35+00:00Added an answer on May 11, 2026 at 2:41 pm

    Cyclic references: a shared_ptr<> to something that has a shared_ptr<> to the original object. You can use weak_ptr<> to break this cycle, of course.


    I add the following as an example of what I am talking about in the comments.

    class node : public enable_shared_from_this<node> { public :     void set_parent(shared_ptr<node> parent) { parent_ = parent; }     void add_child(shared_ptr<node> child) {         children_.push_back(child);         child->set_parent(shared_from_this());     }      void frob() {         do_frob();         if (parent_) parent_->frob();     }  private :     void do_frob();     shared_ptr<node> parent_;     vector< shared_ptr<node> > children_; }; 

    In this example, you have a tree of nodes, each of which holds a pointer to its parent. The frob() member function, for whatever reason, ripples upwards through the tree. (This is not entirely outlandish; some GUI frameworks work this way).

    The problem is that, if you lose reference to the topmost node, then the topmost node still holds strong references to its children, and all its children also hold a strong reference to their parents. This means that there are circular references keeping all the instances from cleaning themselves up, while there is no way of actually reaching the tree from the code, this memory leaks.

    class node : public enable_shared_from_this<node> { public :     void set_parent(shared_ptr<node> parent) { parent_ = parent; }     void add_child(shared_ptr<node> child) {         children_.push_back(child);         child->set_parent(shared_from_this());     }      void frob() {         do_frob();         shared_ptr<node> parent = parent_.lock(); // Note: parent_.lock()         if (parent) parent->frob();     }  private :     void do_frob();     weak_ptr<node> parent_; // Note: now a weak_ptr<>     vector< shared_ptr<node> > children_; }; 

    Here, the parent node has been replaced by a weak pointer. It no longer has a say in the lifetime of the node to which it refers. Thus, if the topmost node goes out of scope as in the previous example, then while it holds strong references to its children, its children don’t hold strong references to their parents. Thus there are no strong references to the object, and it cleans itself up. In turn, this causes the children to lose their one strong reference, which causes them to clean up, and so on. In short, this wont leak. And just by strategically replacing a shared_ptr<> with a weak_ptr<>.

    Note: The above applies equally to std::shared_ptr<> and std::weak_ptr<> as it does to boost::shared_ptr<> and boost::weak_ptr<>.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

What are some of the ways? What frameworks can you use?
What are some ways that I can query the local machine's specifications (a range
Can you suggest some ways/tips to decrease Resharper memory usage in VS 2008. Working
Some ways to iterate through the characters of a string in Java are: Using
I have a web application that in many ways can be considered to be
This can be done in a million ways ... Problem. I have a list
I know there are some ways to get notified when the page body has
What are some ways to write object-oriented code in C? Especially with regard to
Closed as duplicate of What are some ways to protect emails on websites from
So the controller context depends on some asp.net internals. What are some ways to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.