Copying and Copy Constructors in C++

Patreon ► / thecherno
Twitter ► / thecherno
Instagram ► / thecherno
Discord ► thecherno.com/discord
In this video we're talking about copying in C++. Copying objects (and data) is commonly necessary in C++, and to properly facilitate that for our custom types, we need to add something called a copy constructor, which performs a deep copy of our object, if one is necessary. Something called a "(copy) assignment operator" is also sometimes necessary, but we'll talk about that in another video. Copying is not free however, and can slow down your program, so try and avoid it if possible.
Series Playlist ► • C++
Thank you to the following Patreon supporters:
- Samuel Egger
- Dominic Pace
Gear I use:
-----------------
BEST laptop for programming! ► geni.us/pakTES
My FAVOURITE keyboard for programming! ► geni.us/zNhB
FAVOURITE monitors for programming! ► geni.us/Ig6KBq
MAIN Camera ► geni.us/t6xyDRO
MAIN Lens ► geni.us/xGoDWT
Second Camera ► geni.us/CYUQ
Microphone ► geni.us/wqO6g7K

Пікірлер: 412

  • @Sokar599
    @Sokar5995 жыл бұрын

    finally a series on youtube I don't have to put on 2x speed lol

  • @fupopanda

    @fupopanda

    5 жыл бұрын

    Agree. Watching on 1.5x speed. Can't go higher.

  • @KostasOreopoulos

    @KostasOreopoulos

    5 жыл бұрын

    I am really curious If this is filmed at that speed. It is insanely fast

  • @canadianblitz3468

    @canadianblitz3468

    5 жыл бұрын

    Up until episode 30 or so I was watching at 2x speed just so i can get back to the opengl series

  • @ondrejvencovsky6834

    @ondrejvencovsky6834

    4 жыл бұрын

    I'm at 50% speed and finally I understand he speaks english...

  • @macroxela

    @macroxela

    4 жыл бұрын

    Still watching at 2x speed. Otherwise he would be too slow

  • @dkrec2486
    @dkrec24866 жыл бұрын

    We're so lucky this C++ series are free x)

  • @aelthalyste6692

    @aelthalyste6692

    6 жыл бұрын

    Until he realises he can buy a t-rex with his course money if it wasnt free.

  • @laurentiustefan398

    @laurentiustefan398

    5 жыл бұрын

    then again asking 10$ for this course wouldn't be all that much

  • @hitlard5305

    @hitlard5305

    5 жыл бұрын

    Laurentiu Stefan it is for some people who just want to learn

  • @raymondyoo5461

    @raymondyoo5461

    5 жыл бұрын

    absolutely

  • @tamriel_x

    @tamriel_x

    4 жыл бұрын

    @@hitlard5305 exactly what i was thinking as well, regardless im sure he gets a lot more support not asking and seeing what happens.. patreon is there for a reason..

  • @matthewwilson4592
    @matthewwilson45925 жыл бұрын

    The speed you go is perfect, most tutorials are too slow. I lose interest and get nothing. This isn't overly fast and can be followed, also you can tell you really know your stuff so if just flows. Good work, thanks.

  • @felixkimutai8478

    @felixkimutai8478

    5 жыл бұрын

    I am worried, he's too fast

  • @marindraganov8765

    @marindraganov8765

    3 жыл бұрын

    You can play this at x0.75 or at x1.25 up to your personal preference. I am a bit ashamed to say but I might need x0.5 to get some understanding of the matter :)

  • @this_is_mac

    @this_is_mac

    3 жыл бұрын

    @@marindraganov8765 If I don't understand something, I keep repeating it

  • @pierfrancescopeperoni

    @pierfrancescopeperoni

    2 жыл бұрын

    @@this_is_mac While loop?

  • @g4fly4ever8

    @g4fly4ever8

    2 жыл бұрын

    @@pierfrancescopeperoni while(understanding == false){ ReplayVideo(); }

  • @lored6811
    @lored68114 жыл бұрын

    17:48 Little did he know it would take him 3 More Years...

  • @so7am96

    @so7am96

    4 жыл бұрын

    lol! me too, I actually watched the l, r values first

  • @Strategic.

    @Strategic.

    Жыл бұрын

    lol

  • @muneebj.4010
    @muneebj.40103 жыл бұрын

    7:25 thank you for the solution for fixing random garbage at the end of a dynamic char array. I came here looking for copper But found gold

  • @Plasticcaz
    @Plasticcaz6 жыл бұрын

    As someone who learned C and Java at Uni, and is trying to learn C++, this was something that I didn't realize was important until recently. I think this helped solidify a few things in my head. I assume you're going to talk about Move constructors soon too.

  • @TheCherno

    @TheCherno

    6 жыл бұрын

    Yes, we'll get into move semantics eventually. :)

  • @rohitsrivastava4775
    @rohitsrivastava47756 жыл бұрын

    Ever since I stumbled across your channel , it has become a routine to watch one or more of your videos . I don't know it's like an addiction . You have such a clarity in your understanding at such an early age . Awesome and good luck.

  • @bonehelm
    @bonehelm3 жыл бұрын

    Thank you so much. I've heard of this copy constructor topic many times and never understood it. You're the first person to explain WHY it's useful and the problem it solves.

  • @mikedoeren5960
    @mikedoeren596011 ай бұрын

    I've been rewatching this series just for fun, and as always the videos are excellent, informative, and concise. Thanks!

  • @gopapriyajena8630
    @gopapriyajena86302 жыл бұрын

    the best video for deep and shallow copy you really got concept clarity in each video really appreciate your work for society! love your work and explaining

  • @reptilicusrex4748
    @reptilicusrex4748 Жыл бұрын

    I recently found these C++ videos on YT. They're excellent. Thanks for the effort Cherno.

  • @seungminlee9793
    @seungminlee97934 жыл бұрын

    Thank you. I knew vaguely about copying, but thanks to you I understand it clearly now. I'm also watching other videos from the C ++ series.

  • @fishyperil2153
    @fishyperil21536 жыл бұрын

    Even though I've already been through most of this stuff, I love watching your videos 'cause they're such a great way to remind me of some details I've forgotten, provide another viewpoint on some of these topics and deepen/solidify my understanding of them. If it weren't for these videos I'd probably have a whole lot of "backtracking" to do at certain points but just watching one of your videos every day or two really helps rearrange all this stuff in my head in some kind of orderly manner ^^ Keep up the good work man, this series is basically the best online resource ever to do that sort of thing

  • @MsJavaWolf

    @MsJavaWolf

    5 жыл бұрын

    Pretty much the same for me. Another benefit is, that I learn better ways to explain stuff, sometimes new team members will not be very good at C++, so I can use some of the examples in these videos when they have problems.

  • @letranminhkhoa7492

    @letranminhkhoa7492

    2 жыл бұрын

    So true. I thought I have understood all about copy constructor until I sit down and watch this video again and then I go "Ahhhhh so that is how it works"

  • @AmitParopkari
    @AmitParopkari2 жыл бұрын

    this cleared concept of shallow vs deep copy, copy constructor, along with operator overloading & importance of pass by reference, brilliant!

  • @abdulbasir906
    @abdulbasir906 Жыл бұрын

    This is one of the greatest content I have seen on C++ copy constructors...Thanks Cherno

  • @abdulrahmanzaytoun3384
    @abdulrahmanzaytoun33843 жыл бұрын

    How can I be so information-attended and creative in writing code and remembering it without facing any obstacles? I mean u're so fast, so good, keep going brother.

  • @onegamingmoose
    @onegamingmoose6 жыл бұрын

    Charno - No char for you

  • @BT-fj9ek
    @BT-fj9ek3 жыл бұрын

    I am new to C++ and your tutorial just save my life, thanks a lot!

  • @nathannlatimore7863
    @nathannlatimore78633 жыл бұрын

    This was a really comprehensive tutorial. Thank you!!

  • @jpack61108
    @jpack611082 жыл бұрын

    ive said this before, and ill say it again.. this is one of the most informative code channels on youtube.

  • @danielashmeadwright
    @danielashmeadwright6 жыл бұрын

    Excellent example, really clear and concise, well done.

  • @overclockk
    @overclockk4 жыл бұрын

    Just want to say thanks for preparing me for my job interview.

  • @_DarkKnight2301_
    @_DarkKnight2301_3 жыл бұрын

    This literally gave me the solution to an issue I was having related to dynamically creating pointers inside of a base class. I narrowed down the issue that the same location in memory was being deleted twice, but I didn't know the next step. Then this video got reccomend almost as if youtube just knew lol. I'll have to implement the copy constructor and try it out.

  • @greatbullet7372
    @greatbullet73726 жыл бұрын

    The most perfect and not unliked video series on youtube. U rule my Career propably, at least you have a signifant influence about my clarity. I have to thank u

  • @rickyjoebobby1

    @rickyjoebobby1

    4 жыл бұрын

    no kidding, i havent seen many but these are high quality c++ videos

  • @disekjoumoer
    @disekjoumoer2 жыл бұрын

    Man, this series is good. Fast, to the point and makes me feel like I've just sniffed 20 grams of speed.

  • @serkanozturk4217
    @serkanozturk4217 Жыл бұрын

    Personal Notes: -Shallow copy becomes a problem for heap-created objects, not for stack allocated objects(might needs check) -Deep copy is performed by adding copy constructor. After writing copy constructor, you can use “entity1 = entity2” for deep copying -Explained pass by value vs pass by reference. It is safe to use const reference for the function not to be able to modify the object.

  • @imrankhanrahat6031
    @imrankhanrahat60315 жыл бұрын

    Thanks for making a good example. It cleared Copy constructor, Deep/Shallow copy and reference.

  • @mohammednihad6755
    @mohammednihad67556 жыл бұрын

    this is the most interesting episode in the series :)

  • @jahmurlopez379
    @jahmurlopez3794 жыл бұрын

    Thank you so much for helping with that piece of code for 14:32

  • @espressothoughts
    @espressothoughts5 жыл бұрын

    Great job with this series!!

  • @zjfjack
    @zjfjack4 жыл бұрын

    Such a fantastic lesson! Second time to review this.

  • @phicoding7533
    @phicoding7533 Жыл бұрын

    Congrats on 500K subs man !

  • @williamchamberlain2263
    @williamchamberlain22635 жыл бұрын

    Great summary, excellent, simple examples

  • @asadanees781
    @asadanees7815 жыл бұрын

    Nice explanation, awesome . Excellent work.

  • @samsawesomeminecraft
    @samsawesomeminecraft4 жыл бұрын

    you said at 1:24 "so what I'm trying to tell you is always pass your objects by const reference" and I misunderstood that, trying to pass pointers to arrays by reference... it was a 1-hour nightmare fixing the resulting bugs

  • @wack1305
    @wack13052 жыл бұрын

    TheCherno has taught me well; I saw the copies coming with the PrintString() function as he always passes by const ref to avoid this exact thing

  • @thesanctuary225
    @thesanctuary2255 жыл бұрын

    C++ is a great language. I admire sir. Bijarn Stroustrup as well as sir. Dennis Ritchie.

  • @whiteHorse11011
    @whiteHorse11011 Жыл бұрын

    Thank You. This was an awesome video on c++ concepts.

  • @ardeipopa
    @ardeipopa5 жыл бұрын

    Very helpful. Also note that you will make a copy when you return a String object

  • @Quancept
    @Quancept3 жыл бұрын

    Thank you so much Yan for these amazing videos. I don't have the money to support you on Patreon but one day I will definitely do it. Love from India :)

  • @hosseinbiniaz9379
    @hosseinbiniaz9379 Жыл бұрын

    probably the best cpp video it covers so many things haha

  • @patrickes4540
    @patrickes45403 жыл бұрын

    Great explanation. Thank you!

  • @MetalCrotchGuy
    @MetalCrotchGuy6 жыл бұрын

    There is no need to separately copy the NULL terminator in the constructor, you could've just used the m_Size + 1 in the memcpy, just like in the copy constructor, since if the string wasn't properly terminated, the strlen wouldn't work properly as well.

  • @Steve-gi2yj

    @Steve-gi2yj

    4 жыл бұрын

    yes that worked for me to instead of his way, thanks :)

  • @AntonioAstorino

    @AntonioAstorino

    4 жыл бұрын

    Agreed

  • @JohnnyThund3r

    @JohnnyThund3r

    4 жыл бұрын

    Kinda glad he did it wrong though, the extra steps helped me understand it better and reading the comments gives one expertise.

  • @vesk4000

    @vesk4000

    Жыл бұрын

    Yeah I got confused about this exact thing.

  • @johntera4958
    @johntera49582 жыл бұрын

    thanks alot man, you are the best. for me this is heavy stuff alr, but you make me so easy to understand.

  • @ahmeddeghady4510
    @ahmeddeghady45104 жыл бұрын

    You talk really fast and put so much information in just 5 seconds. For a beginner I find Your channel intimidating to watch as i really just understand the first minute and everything comes after slips away

  • @roberttoyonaga171
    @roberttoyonaga1715 жыл бұрын

    Thank you. That was super helpful!

  • @Rok3y
    @Rok3y Жыл бұрын

    You sir are a very good, thanks for these series!

  • @voynich7119
    @voynich71192 жыл бұрын

    Ah, looks like I have reached my first soft cap. Everything up to here was pretty easy to understand for me but I'm starting to feel that I have not understood the preceding topics well enough to follow this 100%. I get the problem you are trying to demonstrate but the stuff around it is a bit too shaky still. I will have to rewatch some of the previous videos and practice some more and I'm sure I'll understand this better because your explanation is done very well :)

  • @tobiaslauss8200
    @tobiaslauss8200 Жыл бұрын

    Thank you, very well explained.

  • @MinMorts
    @MinMorts4 жыл бұрын

    hey youre really good at explaining things cheers!

  • @autumnleaf8483
    @autumnleaf84832 жыл бұрын

    I love the humor this man has.

  • @intjengineering
    @intjengineering2 жыл бұрын

    Thanks for this video! It is amazing. Greetings from Germany!

  • @pwlegolas3
    @pwlegolas34 жыл бұрын

    Awesome Video .. All concepts well explained...!

  • @shawkontzu3990
    @shawkontzu39902 жыл бұрын

    best video explaining copy and deepcopy

  • @chenjin6407
    @chenjin64073 жыл бұрын

    Thank you Charno, I have learned a lot from you : )

  • @mehmetedex
    @mehmetedex Жыл бұрын

    detail is rich, pace is balanced, a sub is gained

  • @krazyolie
    @krazyolie3 жыл бұрын

    For some reason, at my old place of work work our style guide was against passing by reference but to use pointers instead. I'm not sure if they determined it was actually faster, or because they preferred more "C" style code. I don't think the advice was much heeded, though.

  • @TarunKumarSaraswat
    @TarunKumarSaraswat4 жыл бұрын

    Amazing explanation ❤️

  • @aleksandarfranc1094
    @aleksandarfranc10944 жыл бұрын

    haha ChArno! Bro you are hilarious! Really like the series!!

  • @doolee5704
    @doolee57047 ай бұрын

    youre a great teacher, thanks

  • @bradleymclean2018
    @bradleymclean2018 Жыл бұрын

    this video is still helpful in 2022. Thanks a bunch

  • @MegtaBubble
    @MegtaBubble6 жыл бұрын

    The action is starting!

  • @thesanctuary225
    @thesanctuary2255 жыл бұрын

    Creation of "Reference(&)" is one of the good improvement of C++ comparing with C. Reference gives more "memory efficiency" to us.

  • @nonnullptrhuman504

    @nonnullptrhuman504

    2 жыл бұрын

    Also if the function accept reference you don't have to check if the argument is null or not

  • @thewelder3538

    @thewelder3538

    Жыл бұрын

    This is very arguable. References are just dereferenced pointers and there's not a lot of difference between them. In fact, pointers have a lot more power than references because they can be null, changed and mutated. References never can.

  • @mytech6779
    @mytech67792 жыл бұрын

    The only exception that I can think of at the moment to the pass by const ref advice is with primitive types that can be created on the stack.(x86 specific) And that is because the speed of creating, using, and deleting stack frames is pretty close to the minimum lag physically possible due to a combination of cache coherence, registers, and the way the stack pointer works. In some cases the optimizer will not even assign a memory location to a stack primitive, it may live entirely within a cpu register; and deleting a frame is only a matter of decrementing the stackpointer which is generally a one CPU-cycle operation. Still its a pretty narrow case where a program would spend a substantial amount of time creating and deleting primitives. Along with the usual advice to not optimize too much until after getting the logic correct and profiling to find that big O chunk of code. (A bit of consideration for runtime efficiency is warranted during the initial draft just to avoid huge structural changes later on, just don't spend a bunch of time on it.)

  • @93davve93
    @93davve936 жыл бұрын

    Great video!

  • @OnlyfansCustomerSupport
    @OnlyfansCustomerSupport Жыл бұрын

    Nice one :) i get the ideas of what that actualy does far better Then in highscool explanation

  • @patrickg2416
    @patrickg24163 жыл бұрын

    Deep Object.. Shallow Copy.. I saw that look! So many great analogies to make lol

  • @TKcKoucher
    @TKcKoucher Жыл бұрын

    Fantastic content!!!!

  • @LordFers
    @LordFers6 жыл бұрын

    ¡Happy day, Cherno!

  • @abhisheksa6635
    @abhisheksa66359 ай бұрын

    Nice explanation.

  • @crankyunicorn4423
    @crankyunicorn44234 жыл бұрын

    this is very good information

  • @ehsmou3411
    @ehsmou34114 жыл бұрын

    That is awesome video!

  • @senemyildiz.
    @senemyildiz.3 жыл бұрын

    You are talking so fast. but your style is very clear. Thanks for sharing.

  • @enesk2120
    @enesk21206 жыл бұрын

    Very nice tutorial

  • @zeynepsedabirinci1409
    @zeynepsedabirinci14096 жыл бұрын

    Awesome, Thanks!

  • @Maceta444
    @Maceta4442 жыл бұрын

    This was a quality lesson

  • @lfernandorg
    @lfernandorg3 жыл бұрын

    Hey Yan, I'm following your channel for about a few days, and I'm loving your videos about C++ and I wanna know if you have a Github of projects in C++ or maybe you know of some Githubs with projects in C++, I wanna look at the code to learn more programming technics.

  • @nilamasrourisaadat1462
    @nilamasrourisaadat1462 Жыл бұрын

    Amazing tutorials... thank you can you also please give us an actual related problem at the end of the videos with the answer so we can practice..

  • @astaghfirullahalzimastaghf3648
    @astaghfirullahalzimastaghf3648 Жыл бұрын

    I just tried this technique and it work for object on the heap too.. so now I realized const reference is used when the object we want to use does not need to be changed.. although it is const it's value can be assigned to another variable like std:: vector or array

  • @aungkyawkyaw9114
    @aungkyawkyaw91142 ай бұрын

    just excellent!

  • @John2137Paul
    @John2137Paul4 жыл бұрын

    Your tutorials are amazingly well done, and helped me a lot, thanks man!

  • @gavinw77
    @gavinw776 жыл бұрын

    Great episode.

  • @georgei2480
    @georgei24804 жыл бұрын

    @The Cherno. Pls, pls, pls make a Cherno branded T-shirt. I wanna but its to support you cuz I love what you do and I want others to know about you. the best way for me to spread the good word about your channel is with a T-shirt!

  • @rcookie5128
    @rcookie51286 жыл бұрын

    really helpfull stuff :)

  • @akiyprum
    @akiyprum Жыл бұрын

    Awesome video

  • @ricardoffrancisco
    @ricardoffrancisco6 жыл бұрын

    Any idea when you'll be able to get to move semantics? BTW great job with this c++ series!

  • @mohamedmellouky8498
    @mohamedmellouky84983 жыл бұрын

    Just WoW Thank you

  • @TheSeanXe
    @TheSeanXe2 жыл бұрын

    At 8:01, since you were using strlen which calculates using null terminator, there will be a null terminator for that string, so it is safe to just copy it.

  • @michaelswahla4927

    @michaelswahla4927

    Жыл бұрын

    Not for me, I got some garbage values after using memcpy() to copy the string and print it out. However writing this fixed my issue: m_buffer[m_size] = '\0';

  • @buddhasarchive8385
    @buddhasarchive83853 жыл бұрын

    Great video

  • @darkpikachu_.
    @darkpikachu_.3 жыл бұрын

    Shin Lim does a good job teaching C++.

  • @username17234
    @username172344 жыл бұрын

    Aren't you already assuming the string is 0 terminated when you measure its length using strlen?

  • @yavuzselimcagan5233
    @yavuzselimcagan5233 Жыл бұрын

    Fantastic!

  • @FadeStrategy
    @FadeStrategy3 жыл бұрын

    This is a lifesaver

  • @accessdenied9393
    @accessdenied93932 жыл бұрын

    Awesome BUT so fasssst! I have to watch the video many times to better understand. Anyways you are still my professor

  • @knooiwark
    @knooiwark5 жыл бұрын

    That cactus, watch out for your hands ;) thanks for explaining!

  • @opelman5173
    @opelman51733 жыл бұрын

    So well explained Cherno. I would love to get a book with all those details of about C++, would you recommed me one, please?

  • @arijit_ad
    @arijit_ad5 жыл бұрын

    Did you make any video on lvalue and rvalue? also, move semantics?

  • @VeraxonHD
    @VeraxonHD4 жыл бұрын

    God, I wish my lecturer explained this like you did...

  • @Foxoq
    @Foxoq6 жыл бұрын

    Do you have plans to make a video on lvalues, rvalues, and copy/move semantics?

  • @Arwahanoth
    @Arwahanoth3 жыл бұрын

    You can actually use the first constructor in the copy constructor for copying, in short : String(const String& other) : String(other.m_Buffer) {}