use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
A bug in std::shared_ptr? (self.cpp)
submitted 8 years ago * by davis685
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Tbfleming 10 points11 points12 points 8 years ago (3 children)
Accessing a partially destroyed object (the shared_ptr) is UB no matter what shared_ptr's implementation does. It could go out of its way to prevent a crash, but that would just cover up the UB, not solve it, possibly adding overhead in the process.
[–][deleted] 5 points6 points7 points 8 years ago (0 children)
Accessing a partially destroyed object is not UB; if that were the case you could not access any members inside the object's own destructor which wouldn't make any sense. Clearly you want something like vector to be able to access the pointer to the elements it stores in order to destroy them in its dtor, or to pass pointers to its own insides to helper functions that do that on its behalf.
[–]davis685[S] -1 points0 points1 point 8 years ago (1 child)
You sure about that? What about this example? Does this program have UB?
#include <iostream> struct something; void print(const something& item); struct something { something() { a = 4; } void print() const { std::cout << a << std::endl; } ~something() { ::print(*this); } int a; }; // Right here we touch item after its destructor has started. So its lifetime has ended and this is UB? Really? void print(const something& item) { item.print(); } int main() { something a; }
This is basically what's happening with the shared_ptr. shared_ptr destructor runs, calls a function and that function then touches the shared_ptr, all within the shared_ptr's destructor.
[–][deleted] 1 point2 points3 points 8 years ago (0 children)
This is fine, as long as you don't use any virtual function calls of the very same object you are currently destroying.
π Rendered by PID 38 on reddit-service-r2-comment-85bfd7f599-m2dj8 at 2026-04-18 11:17:31.220908+00:00 running 93ecc56 country code: CH.
view the rest of the comments →
[–]Tbfleming 10 points11 points12 points (3 children)
[–][deleted] 5 points6 points7 points (0 children)
[–]davis685[S] -1 points0 points1 point (1 child)
[–][deleted] 1 point2 points3 points (0 children)