Тёмный

Move Semantics in C++ 

The Cherno
Подписаться 647 тыс.
Просмотров 284 тыс.
50% 1

The first 1000 people who click the link in the description will get 2 free months of Skillshare Premium: skl.sh/thechernoproject8
Patreon ► / thecherno
Instagram ► / thecherno
Twitter ► / thecherno
Discord ► thecherno.com/discord
Series Playlist ► thecherno.com/cpp
This video is sponsored by Skillshare.

Опубликовано:

 

15 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 444   
@TheCherno
@TheCherno 4 года назад
Hope you all enjoyed the video! This is just the beginning of the Move Semantics Saga™, still to come is std::move, the move assignment operator, and more! Thanks for watching! ❤️ P.S. RELAX GUYS THE PS5 PART 2 VIDEO IS COMING TOMORROW
@nothingtosee226
@nothingtosee226 4 года назад
Do you have your own personal library of functions, classes, namespaces, etc? My professor told me that it's important for programmers to have their own tools which make their own methods easier.
@AtlasPrimeV
@AtlasPrimeV 4 года назад
ok
@platinoob__2495
@platinoob__2495 4 года назад
Excuse me, I know this is out of the point, but, do you know a way to turn off auto save in Visual Studio Community 2019?
@pratikpatil1383
@pratikpatil1383 4 года назад
Thanks for starting with Move Semantics.. looking forward for more about this..👍
@shaiavraham2910
@shaiavraham2910 4 года назад
Can you make a video about the rule of 3 and the rule of 5 and how to implement them properly?
@shah.kairav
@shah.kairav 2 года назад
In case anyone is wondering why there is only one "Destroyed" line being printed on Cherno's terminal, remember that his program halts due to "std::cin.get()". Once he presses Enter, he should see the other "Destroyed" message. Reason for two destroys: 1 where the hollow object is destroyed + 1 where the actual heap memory is deallocated. Hope this saves time for someone and helps!
@Mzkysti
@Mzkysti 2 года назад
Thanks, I was getting two "Destroyed" and was like what the heck ;). Then I debugged it and the first one is destroying object with size of 0 and data as null, so I actually deduced this somehow myself too...
@frederikrandrup9222
@frederikrandrup9222 2 года назад
Thanks! I was wondering exactly that. Saved me some googling
@pnuema1.618
@pnuema1.618 Год назад
yeah I was wondering! saved me some time!
@alecmather
@alecmather Год назад
Bless your soul...
@Mmmaris_Chan
@Mmmaris_Chan Год назад
it helps! should read the comment first before figuring it out myself🤣
@Norhther
@Norhther 3 года назад
8:24 noexcept is important for performance reasons. In a talk I saw, the example presented was 60% faster using noexcept because of the nature of push_back operation in std::vector. So keep that in mind!
@IndyR0ck
@IndyR0ck Год назад
what's the talk you saw? :)
@torstein5
@torstein5 Год назад
@@IndyR0ck Probably this one: Back to Basics: Move Semantics (part 1 of 2) - Klaus Iglberger - CppCon 2019
@IndyR0ck
@IndyR0ck Год назад
@@torstein5 thx!
@alextiga8166
@alextiga8166 4 года назад
This C++ series will never run out of topics to make a video about :) I've got too many requests what to cover in next videos. For example Multithreading: it would take forever to make videos about threads, locks, lock-free synchronization, fibers, coroutines etc.
@godnyx117
@godnyx117 3 года назад
This didn't aged well...
@alextiga8166
@alextiga8166 2 года назад
​@@godnyx117 Oh yeah I expected this series to cover more advanced topics but had to do my own research on the topic instead. Still a very great series and the best C++ series there is on RU-vid!
@aqezzz
@aqezzz 4 года назад
Thank you for this video! This is one of my favorite series on RU-vid and this is a topic that can be quite confusing but you simplified it beautifully. Great job and keep up the good work
@toddwasson3355
@toddwasson3355 Год назад
Thank you so much for this move semantic vid. This has been wildly helpful to me today. Love your channel, your C++ playlist is by far my favorite of all C++ content.
@mickaelfleurus9944
@mickaelfleurus9944 4 года назад
I owe you a huge thank you ! I've been trying to understand what are lvalue and rvalue for quite a long time, and an even longer time for what the move semantic was all about, and I've finally understand it with your video. I'm in a big learning phase right now, and your channel is an awesome way to improve myself. Thanks for the good work !
@nabeelsherazi8860
@nabeelsherazi8860 3 года назад
Holy shit. I thought I knew things. I don’t know anything. This channel has been such a blessing. Instant sub.
@ericprincen3345
@ericprincen3345 3 года назад
My first professional language was C++, and I moved from it in 1998 when I started working in Internet / Social media. I've moved back to writing low level code on hardware again, and I've been enjoying your videos a great deal. C++ has come a long way, and you've made my transition back a very easy one. BTW, I love the Hazel stuff too. Last time I worked with 3D graphics was when bsp trees were a new thing (and "fingering John Carmack" was something that was regularly done...) Fun to see how far that has all gone. I'm not doing any graphics right now, but fascinated with amount of forward movement in the field over the past 25 years.
@Brahvim
@Brahvim 4 месяца назад
Pointing fingers at sir John Carmack? Sounds like the DOS days to me! I'm sorry I'm asking this _TWO_ years later, but in your opinion, how fast is C++ at evolving? It is often called an ever-evolving language, and especially with us getting a new standard every third year, I, a beginner, feels the same way. Thoughts? I invite other veterans to answer, too!
@iiTzLamar
@iiTzLamar 4 года назад
m_Data = new char[m_Size] should be freed with delete [ ] m_Data; and not delete m_Data;
@gideonunger7284
@gideonunger7284 4 года назад
It should also be m_Size + 1 when allocating for the null terminator
@Spirrwell
@Spirrwell 4 года назад
@@gideonunger7284 Not necessarily. You don't need to store a null terminator if you know your string's size. Though it can be useful with C style string functions. But he should've used delete[] or maybe even allocated with a unique_ptr instead.
@txorimorea3869
@txorimorea3869 4 года назад
That is good advice in general, however in this case is not necessary because the destructor of char is a no-operation. In this specific scenario is not necessary to call the destructor of every object in the array by calling delete[].
@gideonunger7284
@gideonunger7284 4 года назад
@@Spirrwell yes sure if you don't work with any c string functions or pass that pointer to the outside it's fine. But it's still dangerous in c++ since the assumption of a char* is that it's null terminated. Rust doesn't use null termination but there it's the standard of the language so it's not a problem anywhere
@TheJackiMonster
@TheJackiMonster 4 года назад
@@gideonunger7284 It's already dangerous to assume the const char* passed to strlen() will be null terminated. In C++ a compiler might add a null character to such values in double quotes but a C compiler won't do that implicitly which makes sense because you will know the length of a constant array of chars in your code already as developer.
@abdullahamrsobh
@abdullahamrsobh 4 года назад
That video really came, when i needed it thanks Cherno
@chawnneal159
@chawnneal159 3 года назад
OMG! Ever since your view_string video, I've been obsessed with making my own string_view! After this video I was able to mimic some functionality via referencing the same memory! With some extra steps I can prevent writing! Thanks so much!!
@khoing1111
@khoing1111 4 года назад
Founding this channel is a god damn blessing for me. Why did I not know about you earlier? Probably spent my whole life of luck on this.
@DassVeryGood
@DassVeryGood 2 года назад
This makes way more sense than what was being taught to me, where we just pushed multiple of the same object into a vector with different values (i.e. vec.push_back(Move{10})... vec.push_back(Move{n})). Sure it works, but doesn't help with visualizing the need to use a move constructor or semantics. This video helps so much, it just clicked instantly after watching this!
@Sala-lh9fu
@Sala-lh9fu 3 года назад
Thank you so much fir being so thorough with your explanations! :)
@BillThaPill
@BillThaPill 4 года назад
Need that part 2 reaction video bruh. U be preaching facts and I be feeling that. Keep up the good work my guy. Just run that reaction video for ya boy. You’re killing me Smalls
@nallaprakash6901
@nallaprakash6901 4 года назад
Man I was waiting for this from ages 😭😭😭😭, FINALLY Thanks Chernikov 😄
@JayAnAm
@JayAnAm 4 года назад
Wow, naming a parameter "string" is quite... courageous:-)
@ianpan0102
@ianpan0102 3 года назад
Unless you're using namespace std, it doesn't really matter.
@unsafecast3636
@unsafecast3636 3 года назад
@Artem Katerynych #include using namespace std; string string(string string) { string string = string; } int main() { string string = “string”; string(string); }
@barmetler
@barmetler 3 года назад
@@ianpan0102 Using namespace std is a cardinal sin anyway
@alphazero4587
@alphazero4587 3 года назад
@@unsafecast3636 Bruh Bruh(Bruh);
@user-si9jy3zs1j
@user-si9jy3zs1j 3 года назад
@@unsafecast3636 god
@lmnefg121
@lmnefg121 3 года назад
really love your videos and i have learn a lot things from them
@AugusteeeJoJo
@AugusteeeJoJo 3 года назад
This is amazing! Thanks!
@grownupgaming
@grownupgaming 2 года назад
Great video, very clear!
@poggly
@poggly 3 года назад
This helped a lot, thank you!
@CacheTaFace
@CacheTaFace 4 года назад
Great explanation! BTW your hair looks great here
@TarunKumarSaraswat
@TarunKumarSaraswat 3 года назад
Wow❤️ simplified to the core
@kamilkarwacki9590
@kamilkarwacki9590 4 года назад
I learned so much about it but still dont know how to use it. So happy to see that you do a video on it as you always go very deep into these topics.
@hamdaman3593
@hamdaman3593 4 года назад
Yes the ps5 part 2 is coming this weekend, whose looking forward to that
@B4dD0GGy
@B4dD0GGy 4 года назад
entertaining while *learning*, love it
@filosofisto
@filosofisto 4 года назад
Excelent explanation, thank you
@MKolbe-jh6yh
@MKolbe-jh6yh 3 года назад
THANK YOU MY FRIEND! YOU JUST SAVED MY SEMESTER :D
@Ximaz-
@Ximaz- 5 месяцев назад
I really enjoyed your video, thanks.
@Toccobass13
@Toccobass13 3 года назад
Thank you!
@tannishkmankar3998
@tannishkmankar3998 Год назад
Great you solved one headache for me, thanks
@supersquare
@supersquare 4 года назад
Thank you so much Cherno!! You're seriously the best 😊
@xYuki91x
@xYuki91x 4 года назад
Yesss, I've been waiting for this, THANK YOU :) Will you make a video on Return Value Optimization in the future? I don't really get that topic, my professors aren't good at explaining, but you are
@Idlecodex
@Idlecodex 4 года назад
Man... God bless you! :)
@halaszka2949
@halaszka2949 2 года назад
I KISS YOUR EYES! I didnt unterstand it with my book, but then i found you. R Value Refenrences and Move Semantics are very usefull
@ckacquah
@ckacquah 4 года назад
Your videos always explain everything better 👍... Nice example
@user-nx5ob7ny4l
@user-nx5ob7ny4l 2 года назад
u give a human touch to a very dry and difficult topic , very helpfull
@karandutt4534
@karandutt4534 3 года назад
Hello Cherno, please keep uploading new features of C++ 11/14/17/20. Your content is great.
@AllothTian
@AllothTian 4 года назад
It's worth noting that we need to make the moved-from string "hollow" because its original constructor will still fire. In essence, a moved-from object can have multiple instances of its destructor being fired. This, as you can imagine, is rather inefficient. The alternative is what's called a "destructive move," but the design committee of the language couldn't figure out a way to make that fit with the existing object model. For the curious, you can look up Howard Hinnant's and Sean Parent's posts on this matter.
@tannishkmankar3998
@tannishkmankar3998 Год назад
Still working as of today, ty!
@maniaharshil
@maniaharshil 7 месяцев назад
This is freaking greatest explanations ever for move sementic with demo : this explains whats going on underneath actually!! And how move sementic helpful in performance
@mikewajda9912
@mikewajda9912 4 года назад
Just found you channel and watched almost all of your c++ videos and some of your game engine series. Awesome job and thank you! Wanted to ask how you feel about rust compared to c++ and if you have had any experience with rust at all?
@JJFoxLegacy
@JJFoxLegacy 4 года назад
Dude loved the ps5 video, can't wait for the next part !!!
@jh-lp7cg
@jh-lp7cg 4 года назад
Also, I believe any time the compiler can use Return Value Optimization do not try to use move semantics for return values. RVO will be more efficient.
@user-ez2ze8he9u
@user-ez2ze8he9u 4 года назад
4:40 should be delete [ ]
@TernaryM01
@TernaryM01 4 года назад
He should've tested it on PVS-Studio to see if it can detect the memory leak.
@abdallahrashed1947
@abdallahrashed1947 4 года назад
what is the difference ?
@Zatmos
@Zatmos 4 года назад
@@abdallahrashed1947 "delete" destroys a dynamically allocated object and "delete[]" destroys a dynamically allocated array
@jinchengzhang25
@jinchengzhang25 4 года назад
@@TernaryM01 underrated comment lol
@cole-nyc
@cole-nyc 4 года назад
Great video! one comment though: When you heap-allocate an array you have to free it with 'delete[]' instead of 'delete'. Your code frees only the first element of the array.
@KishoreG2396
@KishoreG2396 4 года назад
Technically its UB with char* string literals
@charoniv5631
@charoniv5631 2 года назад
what really?
@tolkienfan1972
@tolkienfan1972 2 года назад
According to the standard, using delete instead of delete[] is UB. In practice, both delete and delete[] are simply forwarded to the libc function "free", and therefore end up behaving the same. Of course I an NOT advocating using delete instead od delete[], that would be terrible practice. But there isn't an implementation out there that only frees the first element. In fact there isn't a function you could use to only free the first element. Even realloc won't do that.
@Flinsch77
@Flinsch77 2 года назад
With `delete` instead of `delete[]`, the whole array gets freed, no problem so far, but only one destructor might be called: that of the first element. This doesn't matter in the case of a `char` array, but it can be relevant for more complex objects, which in turn might allocate their own memory (which would then have to be freed again).
@tolkienfan1972
@tolkienfan1972 2 года назад
@@Flinsch77 that is correct. Thanks for that
@HamidMehr
@HamidMehr 2 года назад
So after attempting to learn move semantics/rvalue references for n times ( n >= 100) this finally clicked. Thanks, Cherno!
@rafalmichalski4893
@rafalmichalski4893 4 года назад
Less typing with "puts" (it adds ' "), so no need to use printf only to print non-formatted string with " " at the end. Anyway great material Cherno.
@tomwhitcombe7621
@tomwhitcombe7621 4 года назад
Literally just watched your lval rval video an hour ago. Good timing :)
@giannitedesco6153
@giannitedesco6153 3 года назад
You can do printf("%.*s ", (int)m_Size, m_Data); rather than that printf loop - it's easier, more efficient, and won't b0rk when you call it from multiple threads since the single call will happen under the stdout lock.
@DIYGuy85
@DIYGuy85 4 года назад
Can someone please give this guy an award!
@gvcallen
@gvcallen 4 года назад
I don't think I've ever been so excited to watch a C++ video before xD. They should put you on Netflix Cherno! ;)
@Swonkasaur
@Swonkasaur 4 года назад
Thank you for the free 2 months of skill share ;D
@267praveen
@267praveen 4 года назад
Finally ... It's here. Thanks Cherno. Next awaited ..... Regex SFINAE Random engines
@xxx489Rockstar984xxx
@xxx489Rockstar984xxx 4 года назад
He finally did it
@shefman200
@shefman200 4 года назад
Ayo my g we respect your regular content...but we want that that ps5 part 2
@shubham91219
@shubham91219 4 года назад
Hey Cherno, could you please make some videos on lock free programming and memory ordering as well? Thanks for all the great content so far.
@KishoreG2396
@KishoreG2396 4 года назад
Memory ordering is a very tricky subject.
@adityakolachana4621
@adityakolachana4621 2 месяца назад
The way you added cast before bringing in std::move was really the way std::move should always be explained.
@StrangeIndeed
@StrangeIndeed 4 года назад
Good stuff
@RaonCreate
@RaonCreate 3 года назад
well done explained
@ivanpolyakov5746
@ivanpolyakov5746 4 года назад
Excellent example with string!
@Albert-lr7ky
@Albert-lr7ky Год назад
Very nice and excellent video!!! Tho I've got a small question: should we be usong "delete [ ] m_Data" in the destructor? Since it is created from "new [ ]"
@jamesbaguio2386
@jamesbaguio2386 Год назад
Yes, the program needs to clean the continuous block of memory allocated to m_Data.
@musicplaylist3550
@musicplaylist3550 4 года назад
These videos are here to stay to help people even 5+ years from now 😨
@Nick-tv5pu
@Nick-tv5pu 10 месяцев назад
Great video, I always look forward to your stuff. That said, at 0:53 isn't that what references (pointers) are for? You don't have to copy a value to/from a function if you just pass/receive a pointer?
@delulu6969
@delulu6969 4 года назад
I'm new to coding/programming. I started with JS and PHP. Along the way I learn OOP, and design patterns. Accidentally, I learn to understand Java and C++ syntax thanks to RU-vid video suggestions like this. Thank you!😊
@meirklemfner114
@meirklemfner114 4 года назад
My goodness! I didn't know the last part...
@mkhadka123
@mkhadka123 Год назад
Ok my head is spinning now
@bipingosain6870
@bipingosain6870 4 года назад
Greate Video! Can you please do a series or at least a video to give an overview of how to get started with Authoritative Multiplayer Code with C++?
@muhammadaamirzaman
@muhammadaamirzaman 4 года назад
Top class teacher for Cpp
@yohan7027
@yohan7027 4 года назад
Should you use move with functions? Let's say: std::vector add( std::vector a, std::vector b) { ... } and I need to use whatever is passed into a and b later, is it better to pass by reference or move? I know that anything moved shouldn't be used again, so is there a way to move back after the function is done? Like making the parameter a const move or something? I ran some trials and move was faster than reference (is that true?) but it's pointless if it leads to undefined behavior.
@Yupppi
@Yupppi 8 месяцев назад
Some of the videos are really clear cut and understandable, but I must say that in this one I dropped the ball very quickly. In like 10 seconds there appeared 50 lines of code and multiple class with their methods, privates, publics, printf, memcpy, delete etc.
@john_codes
@john_codes 4 года назад
Everyone: RELEASE PT 2 OF THE PS5 REACTION VIDEO Cherno: Here's a c++ move semantics video. Lol just kidding. I know he's releasing the video on Saturday. Can't wait!
@redscorpion9325
@redscorpion9325 4 года назад
John True Statement,this popped up and I was like where PS5 part 2 video everyone is waiting for😁
@redscorpion9325
@redscorpion9325 4 года назад
How do you know its being released on Saturday?
@Optamizm
@Optamizm 4 года назад
@M. de k., could be the Discord?
@john_codes
@john_codes 4 года назад
@@redscorpion9325 go to his channel and look at his community post. He said it's coming on Saturday:)
@LangDau
@LangDau 4 года назад
Good stealth
@radioactive5882
@radioactive5882 3 года назад
Move semantics is basically the same thing as what Patrick said from sponge-bob. Why don't we just move the bikini bottom. In other words, moving a large object without copying it. It would be a real pain to build a town, rebuild it somewhere else, and tear the old one down. Thanks btw, your videos semantics and R/L values really helped me out a lot. Would have probably given up on my textbook if I hadn't seen this video. The moment I realized how R and L values worked was when you mentioned the phrase "Location Value". All the rules suddenly clicked. I realized L values were like vacant houses for variables. When you assign 10 to x, you are assigning the value of 10 (an R value) to a memory location (l value). Reference variables allow you to sort of bend the rules a bit...
@TheZenytram
@TheZenytram 3 года назад
4:27 😲 he used printf( ); i cant believe it.
@MadpolygonDEV
@MadpolygonDEV Год назад
im confused about following, when setting other.size =0 arent we also setting our copied data to 0 since we re pointing to the same value? Am I correct to assume that when we use the && function we should think about the variables as pointers instead of references in a sense that were purely assigning pointers now and arent changing the values directly, only the addresses.
@norbertnemesh
@norbertnemesh 4 года назад
You should tell people about swap idiom in this Move Semantics Saga™
@AlmightyFSM
@AlmightyFSM 4 года назад
What a colossal PITA
@crash1013
@crash1013 4 года назад
Many years ago when I learned K&R C, ignoring the NULL sentinel was one of the most painful programming lessons I learned. Bad things can happen if you don't allocate room for the NULL sentinel and then use C standard library string functions.
@Omnifarious0
@Omnifarious0 4 года назад
You missed pointing out that if you have a true temporary it will also use the move constructor without needing ::std::move
@thestarinthesky_
@thestarinthesky_ 4 года назад
Thanks for this great video. It would be great if you could slow down a little bit!
@rajkhandor5949
@rajkhandor5949 4 года назад
Wish if there was a similar Java series. Thanks a lot for this C++ series.
@eugene-the-duckovich
@eugene-the-duckovich 2 года назад
Wow, in two videos in a foreign language I understood move constructors better then after semester of oop in univercity. Thanks a lot, your content is great!
@nabil41854
@nabil41854 4 года назад
Thanks for the great explanation. I just have a note, you are moving the curser a lot making it a bit difficult to follow. cheers
@konstantinrebrov675
@konstantinrebrov675 4 года назад
Finally this topic was explained to me clearly.
@tmsaskg
@tmsaskg 11 месяцев назад
Cherno, you could perfectly voice Mike Judge, several B&B characters including Butthead. Did anyone point that out? Quite good resemblance in this video!
@mgancarzjr
@mgancarzjr 4 года назад
Fairly certain this conundrum was a chapter in Effective C++.
@ameynaik2743
@ameynaik2743 2 года назад
Take aways 1. Move constructor takes rval reference. 2. Instead of type casting var to rval using (T&&) var, we can use std::move(var) const T & takes both rval and lval but if rval is provided to this, it calls copy constructor because intermediate temporary variable is created. To avoid this we use move constructor.
@_Omni
@_Omni Год назад
Casting to xvalue
@adamodimattia
@adamodimattia 4 года назад
Please do an episode about explicityly defaulted constructors like String() = default
@sumitgupta7553
@sumitgupta7553 9 месяцев назад
Hi Cherno, you are just amazing.. Well described. But can you help me in finding out where I'm getting wrong, when I say we can do the work, you done in move constructor, in the copy constructor even in that constructor we only getting reference of the object, then what is the need to define separately!
@SimonBuchanNz
@SimonBuchanNz 4 года назад
Compare to Rust, where move is the default, and only very basic types are silently copyable, otherwise you need to explicitly clone or borrow (make a reference) to a value
@jdleanne
@jdleanne 4 года назад
love C++ love
@GreenFlame16
@GreenFlame16 4 года назад
Hey, Cherno, the video after Static Analysis in C++ is now marked as private. Was that intentional? Or was it also on move semantics but now you're redoing it and thus removed the old one? Loving your content!
@R3negade638
@R3negade638 4 года назад
Dat rubber duck water bottle
@indramaniarora7901
@indramaniarora7901 2 года назад
Hey Cherno. One video on std::decay as well please
@joshuaeirman2197
@joshuaeirman2197 4 года назад
Thank you, Cherno. For something like this, the code to look at as a text file would be worthwhile. How about it?
@J-PSX
@J-PSX 4 года назад
The PS5 part 2 is coming this weekend
@midnightcookies8699
@midnightcookies8699 4 года назад
tomorrow
@redscorpion9325
@redscorpion9325 4 года назад
How do you know🤷🏽‍♂️seems like rumors to me
@valizeth4073
@valizeth4073 4 года назад
What made you switch to printf over streams? Personally I always use fmtlib, and I can see that printf is quite similar, but why tho?
@therealgunny
@therealgunny 4 года назад
move semantics are a great addition to c++ imo. i really like the approach that the committee has taken with c++. they are trying to make it more user friendly for new comers. great video btw.
@gideonunger7284
@gideonunger7284 4 года назад
Move semantics in c++ are a terrible mess though. Compared to move semantics in rust it's so overengeneered, complicated and also worse to use.
@therealgunny
@therealgunny 4 года назад
@@gideonunger7284 tbh if you compare c++ to most of the languages, it's a mess, i'm an avid c# user besides c++ and i know what you mean.
@benhetland576
@benhetland576 4 года назад
Move semantics is really not much more than fancy syntax sugar for pointer management behind the scenes IMO. Ownership of heap-allocated data is perhaps the most crucial issue to retain a clear overview over in order to stear clear of producing an app full of memory leaks (or the opposite: double-freeing). In languages with automatic built-in memory mgmt this challenge is attempted solved with a different philosophy than in C++ with its direct mem.mgmt, and that may well justify hiding those details from the programmer there. But with direct mem.mgmt hiding such details just appears to falsely relieve the programmer from that concern which they really ought not, and should not, forget about, ever! Thus, an unaware coder is easily mislead into not caring so much about it as they probably should; there is a loss of awareness. One got more direct control of mem.mgmt with a potential for better performance and flexibility, but with that potential also comes risks and responsibilities. In light of this I personally think we would be better off without the feature, as the smart pointers actually provide the same solution except you can better see what is actually going on. Move semantics actually cannot completely avoid copying in all cases anyway (consider objects on the stack as well as the underlying ptr to heap memory, for example), and it also introduces a nasty side-effect in that it may leave the source object in a limbo state while it is still technically accessible and within scope of the code. While such use is declared illegal/undefined, it is something that becomes all too easy to do by mistake. I guess I have just seen too many bugs arising from using uninitialized vars/objs over the years too feel comfortable in presence of any new feature with similar risks... It is not always that easy to know in an instance whether a move ctor or assignment was invoked instead of the corresponding copy ctor/asgmt ;-)
Далее
std::move and the Move Assignment Operator in C++
16:06
lvalues and rvalues in C++
14:13
Просмотров 306 тыс.
skibidi toilet multiverse 039 (part 2)
08:58
Просмотров 4,9 млн
POP CHALLENGE 🎈
00:36
Просмотров 688 тыс.
WHY did this C++ code FAIL?
38:10
Просмотров 210 тыс.
I made it FASTER // Code Review
38:46
Просмотров 527 тыс.
Return Value Optimization and Copy Elision in C++
9:54
I Rewrote This Entire Main File // Code Review
16:08
Просмотров 137 тыс.
SINGLETONS in C++
19:16
Просмотров 196 тыс.
are "smart pointers" actually smart?
9:44
Просмотров 72 тыс.
The "auto" keyword in C++
17:04
Просмотров 200 тыс.
31 nooby C++ habits you need to ditch
16:18
Просмотров 744 тыс.
ITERATORS in C++
17:09
Просмотров 203 тыс.
skibidi toilet multiverse 039 (part 2)
08:58
Просмотров 4,9 млн