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

  • Home
  • SEARCH
  • 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 45771
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T15:51:41+00:00 2026-05-10T15:51:41+00:00

C++ is all about memory ownership – aka ownership semantics . It is the

  • 0

C++ is all about memory ownership – aka ownership semantics.

It is the responsibility of the owner of a chunk of dynamically allocated memory to release that memory. So the question really becomes who owns the memory.

In C++ ownership is documented by the type a raw pointer is wrapped inside thus in a good (IMO) C++ program it is very rare (rare, not never) to see raw pointers passed around (as raw pointers have no inferred ownership thus we can not tell who owns the memory and thus without careful reading of the documentation you can’t tell who is responsible for ownership).

Conversely, it is rare to see raw pointers stored in a class each raw pointer is stored within its own smart pointer wrapper. (N.B.: If you don’t own an object you should not be storing it because you can not know when it will go out of scope and be destroyed.)

So the question:

  • What type of ownership semantic have people come across?
  • What standard classes are used to implement those semantics?
  • In what situations do you find them useful?

Lets keep 1 type of semantic ownership per answer so they can be voted up and down individually.

Summary:

Conceptually, smart pointers are simple and a naive implementation is easy. I have seen many attempted implementations, but invariably they are broken in some way that is not obvious to casual use and examples. Thus I recommend always using well tested smart pointers from a library rather than rolling your own. std::auto_ptr or one of the Boost smart pointers seem to cover all my needs.

std::auto_ptr<T>:

Single person owns the object. Transfer of ownership is allowed.

Usage: This allows you to define interfaces that show the explicit transfer of ownership.

boost::scoped_ptr<T>

Single person owns the object. Transfer of ownership is NOT allowed.

Usage: Used to show explicit ownership. Object will be destroyed by destructor or when explicitly reset.

boost::shared_ptr<T> (std::tr1::shared_ptr<T>)

Multiple ownership. This is a simple reference counted pointer. When the reference count reaches zero, the object is destroyed.

Usage: When an object can have multiple owers with a lifetime that can not be determined at compile time.

boost::weak_ptr<T>:

Used with shared_ptr<T> in situations where a cycle of pointers may happen.

Usage: Used to stop cycles from retaining objects when only the cycle is maintaining a shared refcount.

  • 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-10T15:51:42+00:00Added an answer on May 10, 2026 at 3:51 pm

    For me, these 3 kinds cover most of my needs:

    shared_ptr – reference-counted, deallocation when the counter reaches zero

    weak_ptr – same as above, but it’s a ‘slave’ for a shared_ptr, can’t deallocate

    auto_ptr – when the creation and deallocation happen inside the same function, or when the object has to be considered one-owner-only ever. When you assign one pointer to another, the second ‘steals’ the object from the first.

    I have my own implementation for these, but they are also available in Boost.

    I still pass objects by reference (const whenever possible), in this case the called method must assume the object is alive only during the time of call.

    There’s another kind of pointer that I use that I call hub_ptr. It’s when you have an object that must be accessible from objects nested in it (usually as a virtual base class). This could be solved by passing a weak_ptr to them, but it doesn’t have a shared_ptr to itself. As it knows these objects wouldn’t live longer than him, it passes a hub_ptr to them (it’s just a template wrapper to a regular pointer).

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

Sidebar

Related Questions

I'm trying to find about ALL the possible options that I can set in
My question is about memory use and objects in actionscript 2. If I have
The webservice on MSDN is now all about the Windows Communication Foundation. Is there
I've heard a lot about profiling. What is this all about? As far as
Questions #1 through #4 on the Joel Test in my opinion are all about
I'm learning about WCF Web Services and I'm concerned about all of the coupling
There are lots of IDEs for PHP development, but I'm curious about all the
All I know about the constraint is it's name ( SYS_C003415 ), but I
What's all this business about Flash, Flex, Adobe Air, Java FX and Silverlight? Why
I'm getting all learned up about binding in WPF. I'm having a lot of

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.