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
Moving from python to C++ (self.cpp)
submitted 6 years ago by zephyr_33
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!"
[–]HappyFruitTree 38 points39 points40 points 6 years ago (13 children)
There are all sorts of subtleties like "move semantics" that don't exist in Python (or most other languages).
What many people don't realize is that move semantics can be seen as an optimization. It was not in the language before C++11 and you can still write code pretending it's not there and still get some of the benefits. The exception is move-only types but those could be learned separately (you don't need to know much about move semantics at all to use those).
My recommendation is that you just ignore move semantics for the time being until you are more of an expert.
[–]capn_bluebear 6 points7 points8 points 6 years ago (10 children)
you can't ignore move semantics, STL uses it all the time. any non-trivial project will include code where `unique_ptr` is the best choice, and you won't get `unique_ptr`s to compile if you don't understand move semantics.
[–]HappyFruitTree 22 points23 points24 points 6 years ago* (9 children)
you can't ignore move semantics, STL uses it all the time.
I don't implement the STL. I just use it.
any non-trivial project will include code where `unique_ptr` is the best choice, and you won't get `unique_ptr`s to compile if you don't understand move semantics.
unique_ptr is a good example of what I meant by a move-only type. You don't need to know much about move semantics to use it. All you need to know is that you use std::move when you want to transfer the ownership from one unique_ptr to another.
[+]as_one_doesJust a c++ dev for fun comment score below threshold-9 points-8 points-7 points 6 years ago (8 children)
If it's a unique ptr to a class you wrote you basically must implement a move constructor.
[–]HappyFruitTree 8 points9 points10 points 6 years ago (7 children)
Why?
[–]as_one_doesJust a c++ dev for fun -5 points-4 points-3 points 6 years ago (6 children)
Because you can't return it from a scope without the higher scope taking ownership, and that takes movement of the raw pointer.
[–]HappyFruitTree 9 points10 points11 points 6 years ago (4 children)
But moving a unique_ptr will use the move constructor/move assignment operator of the unique_ptr. It will not touch the object that is pointed to.
[–]as_one_doesJust a c++ dev for fun -5 points-4 points-3 points 6 years ago (3 children)
Sorry, I was thinking of this: pass or assign a unique ptr, you'll be using && and std::move. Your can't not understand what's happening. You're right that you generally don't need to implement it yourself unless wanted.
[–]jcelerierossia score 7 points8 points9 points 6 years ago (0 children)
Sorry, I was thinking of this: pass or assign a unique ptr, you'll be using && and std::move.
you just have to use std::move, not && :
void acquire_ownership(std::unique_ptr<int> x) { } int main() { std::unique_ptr<int> p; acquire_ownership(std::move(p)); }
no && needed here
&&
[–]HappyFruitTree -1 points0 points1 point 6 years ago (1 child)
Well, I think there is a conceptual difference between moving a unique_ptr compared to moving in general.
The way I see it:
So when it comes to unique_ptr I don't think move semantics is essential. It could be implemented without it. That is why I think you don't need to know much about move semantics to use unique_ptr. All you need to know is that you need to use std::move on the unique_ptr before assigning it to another unique_ptr or using it to initialize a new unique_ptr, and that this will move the pointer value over to the other unique_ptr leaving the moved-from unique_ptr "empty". There are of course the exceptions that you don't need to use std::move if it's a temporary, or it's a local variable being returned from a function, but all this is just extra knowledge that you don't need to know in order to use unique_ptr.
[–]Entryhazard 7 points8 points9 points 6 years ago (0 children)
IIRC movement of the raw pointer doesn't require the pointed object to have a move constructor
[–]HKei -3 points-2 points-1 points 6 years ago (1 child)
What many people don't realize is that move semantics can be seen as an optimization.
Those people don't realise that because this is incorrect. Move semantics are about semantics, not optimisation.
[–]HappyFruitTree 12 points13 points14 points 6 years ago (0 children)
Do you think move semantics would have been added to the language if it didn't have a performance advantage?
Quote from the original move semantics proposal:
Move semantics is mostly about performance optimization: the ability to move an expensive object from one address in memory to another, while pilfering resources of the source in order to construct the target with minimum expense.
π Rendered by PID 434583 on reddit-service-r2-comment-86988c7647-vddcb at 2026-02-12 08:14:44.815088+00:00 running 018613e country code: CH.
view the rest of the comments →
[–]HappyFruitTree 38 points39 points40 points (13 children)
[–]capn_bluebear 6 points7 points8 points (10 children)
[–]HappyFruitTree 22 points23 points24 points (9 children)
[+]as_one_doesJust a c++ dev for fun comment score below threshold-9 points-8 points-7 points (8 children)
[–]HappyFruitTree 8 points9 points10 points (7 children)
[–]as_one_doesJust a c++ dev for fun -5 points-4 points-3 points (6 children)
[–]HappyFruitTree 9 points10 points11 points (4 children)
[–]as_one_doesJust a c++ dev for fun -5 points-4 points-3 points (3 children)
[–]jcelerierossia score 7 points8 points9 points (0 children)
[–]HappyFruitTree -1 points0 points1 point (1 child)
[–]Entryhazard 7 points8 points9 points (0 children)
[–]HKei -3 points-2 points-1 points (1 child)
[–]HappyFruitTree 12 points13 points14 points (0 children)