두들낙서
두들낙서
  • Видео 107
  • Просмотров 2 493 298
댓글 이벤트 당첨자 발표!!
=== 당첨자 목록 ===
dy R 님 (ruclips.net/channel/UCv5yoJ3llbyldlcZgNZmCaA)
야압 님 (ruclips.net/channel/UCvtzAmWVlpju1em_hhOj4ng)
이현서 님 (ruclips.net/channel/UCFFzMsrKUZ_2BqM2baae00A)
권용환 님 (ruclips.net/channel/UCvrMKnxlqAawbY7IfOIHY2Q)
이영구 님 (ruclips.net/channel/UC8rgDXzGZhyKouUNvb47fZg)
당첨자 분들 모두 축하드립니다!! 🎉🎉
Просмотров: 1 734

Видео

대충 책 나왔다는 뜻 (+추첨 이벤트!)
Просмотров 10 тыс.3 года назад
책 제목: 두들낙서의 C/C 한꺼번에 배우기 YES24: www.yes24.com/Product/Goods/101880448 교보문고: www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791158392581 인터파크: book.interpark.com/product/BookDisplay.do?_method=detail&sc.saNo=001&sc.prdNo=350355166 사용된 음악 Lym en - Why? / remix by idhn br by idhn
[C/C++ 강좌] 96강. 스마트 포인터
Просмотров 8 тыс.3 года назад
메모리 관리와 소유권 문제를 편하게 해결할 수 있는 스마트 포인터에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 95강. 함수 객체와 람다식
Просмотров 4,5 тыс.3 года назад
함수를 표현하는 또다른 방법인 함수 객체와 람다식에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 94강. 함수 포인터
Просмотров 9 тыс.3 года назад
함수를 가리키는 함수 포인터에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 93강. 예외 처리
Просмотров 3,5 тыс.3 года назад
C 에서 예외를 만들고 처리하는 방법에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 92강. 템플릿 (2) - 템플릿 특수화와 비타입 파라미터
Просмотров 3,3 тыс.3 года назад
템플릿의 추가적인 기능인 특수화와 비타입 파라미터에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 91강. 템플릿 (1) - 함수 템플릿과 클래스 템플릿
Просмотров 7 тыс.3 года назад
템플릿의 개념과 가장 많이 쓰이는 템플릿인 함수 템플릿과 클래스 템플릿에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 90강. 정사각형-직사각형 문제
Просмотров 2,1 тыс.3 года назад
객체 지향 프로그래밍의 또 다른 문제점인 정사각형-직사각형 문제에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 89강. 다중 상속과 다이아몬드 문제
Просмотров 2,4 тыс.3 года назад
다중 상속의 개념과 그로 인해 발생하는 문제점인 다이아몬드 문제에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[ADOFAI/얼불춤] 10-X Butterfly Planet (Piano Arr.)
Просмотров 8 тыс.3 года назад
누군가는 만들어서 올릴 줄 알았는데 아직 제대로 된 게 유튜브에 없는 것 같아서 직접 사보했습니다... 악보 링크도 곧 올리겠습니다. 작곡: Riya
[C/C++ 강좌] 88강. 10부 종합문제 2 (상속)
Просмотров 1,6 тыс.3 года назад
10부에서 배웠던 상속, 다형성, 추상화에 대한 종합문제를 풀어보자. 3번 소스 코드: drive.google.com/file/d/10nkLbwc4JYHvIaU7_xrbz526TZ8-TUTV/view?usp=sharing 3번 정답: drive.google.com/file/d/1O-1BMbu1Y4FI8KBJ4x0GDujk2CDRVapA/view?usp=sharing 4번 소스 코드: drive.google.com/file/d/1-rvHgYYrfu3o73GlniT_Pgsl4FAPDast/view?usp=sharing 4번 정답: drive.google.com/file/d/1NGPyVqaOvJH3kdduI1_cfbQXzEmMLTYC/view?usp=sharing 질문은 댓글이나, 두들낙서 지식공유 서버에서...
[C/C++ 강좌] 87강. 10부 종합문제 1 (상속)
Просмотров 2,3 тыс.3 года назад
10부에서 배웠던 상속, 다형성, 추상화에 대한 종합문제를 풀어보자. 2번 소스 코드: drive.google.com/file/d/1iRg-Tpa8ZlvSL0eDQ5LxhENJ_r6Kz5CK/view?usp=sharing 2번 정답: drive.google.com/file/d/1Rjoaqu5SVafVMBcWL9YdDbLAkvKhjMw9/view?usp=sharing 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 86강. 객체 지향 프로그래밍의 4대 원리 (2)
Просмотров 3,7 тыс.3 года назад
객체 지향 프로그래밍의 나머지 두 원리인 다형성과 추상화에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 85강. 객체 지향 프로그래밍의 4대 원리 (1)
Просмотров 4,6 тыс.3 года назад
객체 지향 프로그래밍의 4대 원리 중 캡슐화와 상속성에 대해 알아보자. 질문은 댓글이나, 두들낙서 지식공유 서버에서 하실 수 있습니다. ▶ 두들낙서 지식공유 서버 참가하기: discord.gg/y4SXcjU
[C/C++ 강좌] 84강. 상속에서의 형변환 (3) - RTTI와 dynamic_cast
Просмотров 4 тыс.4 года назад
[C/C 강좌] 84강. 상속에서의 형변환 (3) - RTTI와 dynamic_cast
[C/C++ 강좌] 83강. 상속에서의 형변환 (2) - 다운캐스팅
Просмотров 3,7 тыс.4 года назад
[C/C 강좌] 83강. 상속에서의 형변환 (2) - 다운캐스팅
[C/C++ 강좌] 82강. 상속에서의 형변환 (1) - 업캐스팅
Просмотров 8 тыс.4 года назад
[C/C 강좌] 82강. 상속에서의 형변환 (1) - 업캐스팅
[C/C++ 강좌] 81강. 생성/소멸자 실행 순서와 가상 소멸자
Просмотров 4,9 тыс.4 года назад
[C/C 강좌] 81강. 생성/소멸자 실행 순서와 가상 소멸자
구독자 만명 기념 Q&A!
Просмотров 2,7 тыс.4 года назад
구독자 만명 기념 Q&A!
[C/C++ 강좌] 80강. 순수 가상 함수와 추상 클래스
Просмотров 7 тыс.4 года назад
[C/C 강좌] 80강. 순수 가상 함수와 추상 클래스
[C/C++ 강좌] 79강. 상속이 필요한 이유 (2)
Просмотров 7 тыс.5 лет назад
[C/C 강좌] 79강. 상속이 필요한 이유 (2)
[C/C++ 강좌] 78강. 가상 함수와 동적 바인딩
Просмотров 10 тыс.5 лет назад
[C/C 강좌] 78강. 가상 함수와 동적 바인딩
[C/C++ 강좌] 77강. 오버라이딩과 정적 바인딩
Просмотров 10 тыс.5 лет назад
[C/C 강좌] 77강. 오버라이딩과 정적 바인딩
[C/C++ 강좌] 76강. 상속이 필요한 이유 (1)
Просмотров 9 тыс.6 лет назад
[C/C 강좌] 76강. 상속이 필요한 이유 (1)
[C/C++ 강좌] 75강. 상속과 접근 제어
Просмотров 13 тыс.6 лет назад
[C/C 강좌] 75강. 상속과 접근 제어
[C/C++ 강좌] 74강. 9부 종합문제 2 (동적 할당과 객체 복사)
Просмотров 4,4 тыс.6 лет назад
[C/C 강좌] 74강. 9부 종합문제 2 (동적 할당과 객체 복사)
[C/C++ 강좌] 73강. 9부 종합문제 1 (동적 할당과 객체 복사)
Просмотров 7 тыс.7 лет назад
[C/C 강좌] 73강. 9부 종합문제 1 (동적 할당과 객체 복사)
[C/C++ 강좌] 72강. 묵시적 형변환 (2)
Просмотров 5 тыс.7 лет назад
[C/C 강좌] 72강. 묵시적 형변환 (2)
[C/C++ 강좌] 71강. 묵시적 형변환 (1)
Просмотров 7 тыс.7 лет назад
[C/C 강좌] 71강. 묵시적 형변환 (1)

Комментарии

  • @dhhan68
    @dhhan68 18 дней назад

    와우 유익한 기능이군요. 쓰임새가 있을 것 같습니다. 복사생성자/대입연산자 구현이 쉽지가 않았는데 배열로 쉽게 해결이 되네요. ㅎㅎ

  • @dhhan68
    @dhhan68 26 дней назад

    잘 보고 갑니다. 강의하시는 열정에 감사드립니다. 저도 유튜브를 통해 다른 강의를 좀 했었는데 쉽지가 않더라구요. 오래 전에 C언어를 좀 했었는데 당시에는 객체 지향이라는 개념이 낯설어서 제대로 배우지 못했습니다. 이제 조금씩 익혀나가니 상당히 재미있네요. 객체, 상속 개념도 현실 세계를 해석하는 하나의 추상 개념에서 출발한 듯하여 더욱 흥미롭고요. C++은 로봇 제어, 임베디드 등등 어디 안 쓰이는 데가 없더라구요...ㅎㅎ

  • @dhhan68
    @dhhan68 27 дней назад

    상당히 흥미로운 주제군요. 언뜻, 개인 동일성(personal identity) 철학자 데렉 파핏의 화성 원격 전송 사고실험이 생각나네요. 지구에 있는 사람의 몸을 원자 단위로 스캔해서 그 정보를 화성에 보내 그곳의 수신기에서 원자 물질들로 그 정보에 기초에 그 사람을 똑같이 건축한다는 이야기인데, 이게 객체의 깊은 복사랑 비슷한 개념 같군요. 결국 지구의 그 사람이 화성으로 그냥 이동하면 될 것인데(얕은 복사), 시간이 오래 걸리니 광속 전송을 위해 깊은 복사를 한다는 이야기겠지요. 지구의 그 복사된 인간은 제거되고, 화성에서 깨어난 새로운 사람이 지구의 그 사람과 완전히 동일해진다는 이야기인데, C++ 등장 배경에도 세상을 바라보는 어떤 철학적 배경이 느껴집니다. 위상수학, 선형대수...의 수학과, 컴퓨터 코딩과, 마음철학&분석철학&정체성철학&경험철학&SF스토리,가 절묘하게 상호 연결되어 있다는 인상을 요즘 받습니다. 약간 추상적인 이런 이야기가 훨씬 흥미로운 어떤 영감을 던져주는 것 같습니다.

  • @강동원이다
    @강동원이다 Месяц назад

    형님 기모찌하게 배우고잇습니다 사랑티비~

  • @이재석-h8j
    @이재석-h8j Месяц назад

    int main() { int a[5]; int i; for (i = 0; i <= 4; i++) { a[i] = i * 5; printf("%d ", a[i]); } printf(" "); } 이렇게 해도 똑같이 나오던데 괜찮나요?

  • @butterfly_dream
    @butterfly_dream 2 месяца назад

    와 ㅋㅋ 진짜 정연하게 설명 잘하시네요 잘 봤습니다

  • @wwy125
    @wwy125 6 месяцев назад

    감사합니다. 궁금한게 하나 있는데요. 이처럼 int main 형태의 콘솔 프로그램에서 , 이벤트를 발생시킬수 있을까요? 좀 멍청한 소리 같지만, 루프코드가 있는 경우는 가능할듯 한데요. 이처럼 loop가 없는 프로그램에서 이벤트(예를 들어 키보드 입력 이벤트)를 발생시키는 방법이 아마 없을거라고 생각은 하지만,, 왜 이런 생각을 하냐면. loop를 계속 돌면서 이벤트 체크를 하면, 어쩔수 없이 리소스 낭비가 생기는데, 이걸 async 와 couroutine , delegate를 만들어 (thread도 필요하겠군요) 동작한다면, 효율이 많이 향상될건 분명할텐데요. 아마 안될거라고 생각은 하는데, 나중에 머리 아프게 만들기에 좋은 주제인거 같기는 하군요

  • @wwy125
    @wwy125 6 месяцев назад

    19번째 줄을 ([arr] (char* s) { cout << s<<endl;}) ( arrFnMin(arr,7,[](int n) -> int {return n*n;}); 이렇게 바꿔도 되겠군요.

  • @wwy125
    @wwy125 6 месяцев назад

    c++표준명세에서는 괄호 두번 사용과 한번 사용이 동일한 결과를 내므로, eq()(12)와 eq(12)가 같은 결과를 만들어 낸 거군요

  • @wwy125
    @wwy125 6 месяцев назад

    10라인에서, int min =f(arr[0]); 중에 f를 (f)로 써도되고, (*fp)를 써도 되는 군요. 왜 그런가 알아보니, 함수호출의 경우에는 이 두경우가 같도록 컴파일러를 만들었다고 합니다. 컴파일러구조상 이렇게 만들어진다고 하네요.

  • @wwy125
    @wwy125 6 месяцев назад

    생성을 팣빙수에서 하고, 빙수로 캐스팅해서 팢빙수를 호출하였으므로, 사실 이런 문제를 일으킨 것은 "빙수로 캐스팅"한 행위가 원인이라고 봅니다. 따라서, 이문제에 대한 해결의 책임은 빙수에 있다고 봅니다. 일반적으로는 virtual overriding 된 클래스에서는 대부분 소멸자도 virtual이 될거 같은데, 더 많은 복잡한 문제가 생길수 있을거 같군요.. 사실 이 이유에서 c++20인가 11 인가부터 std::smart_ptr,shared_ptr,weak_ptr등이 나온거 같군요.

  • @wwy125
    @wwy125 6 месяцев назад

    virtual 함수 호출이 일어나는 메카니즘은, 호출되는 클래스 인스턴스를 가르키는 vtable을 가짐으로써. 그 테이블을 참조하여 해당하는 함수를 호출하는 것으로 압니다. 즉, 클래스는 동적바인딩을 하고, 그 클래스의 함수는 정적바인딩에 지정된대로 동작을 한다고 하고, 디버깅해봐도 그렇게 동작을 하는군요. 그렇다면 여기서 이런 생각이 듭니다. 결국 가상함수 호출은 재귀적인 호출도 가능한 메커니즘 인거 같군요. 즉, 가상함수의 가상함수도 개념적으로는 가능하다는 얘기가 되네요. 그런데 virtual vitual funA () =0; 와 같은 형태를 컴파일러가 지원하지는 않을거 같군요. 실제 해보지는 않았지만요. (아니면 다른형태로..), 나중에 시간이 나면, virtual 의 virtual 호출이 구현되는지도 확인해 보면 재미(?)있을거 같기도 하고, 어쩌면 나중 c++이 버젼업 되면서 추가될런지도 모르겠군요

  • @wwy125
    @wwy125 6 месяцев назад

    이 코드의 함수 호출부분을 ,void printMessage(const Message m) 으로 바꾸면, 복사생성자가 호출이 되는데. 그렇게 되면, vitual 함수 호출이 일어나지 않는가? edit 답안 표시 expand_more volume_up 네, 맞습니다. printMessage 함수의 매개변수를 const Message& m에서 const Message m으로 변경하면 값에 의한 전달(Pass by value) 방식으로 함수 호출이 이루어집니다. 이는 함수 호출 시 인자로 전달된 객체가 복사되어 함수 내부에서 사용됨을 의미합니다. 따라서, printMessage(hello) 또는 printMessage(*dog)와 같이 호출할 때, TextMessage 또는 ImageMessage 객체의 복사 생성자가 호출됩니다. 가상 함수 호출 문제: 복사 생성자는 기본적으로 얕은 복사(Shallow Copy)를 수행합니다. 얕은 복사는 객체의 멤버 변수 값만 복사하므로, 만약 부모 클래스에 가상 함수가 있고 자식 클래스에서 이를 오버라이딩(Overriding)한 경우, 복사된 객체는 부모 클래스의 가상 함수 테이블을 그대로 사용하게 됩니다. 따라서, printMessage 함수 내부에서 m.GetContent()와 같이 가상 함수를 호출하면, 자식 클래스에서 오버라이딩한 함수가 아닌 부모 클래스의 함수가 호출되는 문제가 발생합니다. 이는 다형성(Polymorphism)을 제대로 활용하지 못하는 결과를 초래합니다. 해결 방법: 이 문제를 해결하기 위해서는 다음과 같은 방법을 사용할 수 있습니다. 참조에 의한 전달(Pass by reference) 사용: 함수의 매개변수를 const Message& m으로 변경하여 복사 생성자 호출을 방지하고, 원본 객체에 대한 참조를 전달합니다. 이렇게 하면 가상 함수 호출 시 올바르게 자식 클래스의 오버라이딩된 함수가 호출됩니다. 클래스 내부에 복사 생성자 명시적 정의: 깊은 복사(Deep Copy)를 수행하는 복사 생성자를 직접 정의하여 객체 복사 시 가상 함수 테이블도 함께 복사되도록 합니다. 결론: 값에 의한 전달 방식으로 함수를 호출하면 복사 생성자 호출과 함께 가상 함수 호출 문제가 발생할 수 있습니다. 이를 해결하기 위해 참조에 의한 전달 방식을 사용하거나 깊은 복사를 수행하는 복사 생성자를 직접 정의해야 합니다.

  • @wwy125
    @wwy125 6 месяцев назад

    개인적인 생각이지만. c++은 좀 언어구조가 지저분한 면이 있다고 봅니다. 예를 들어 char *A 라고 할때, *기호는 어떤때는 char* 의 의미이고, 어떤때는 *A의 의미로 쓰입니다. 마치 쉬뢰딩거의 살아있으면서 죽은 고양이 처럼, 오락가락 한다는 거죠. 언어설계자들이 꼭 이렇게 혼란스럽게 이중의 의미를 부여해서 정의할 필요가 있었을까 싶습니다. 근데 그 사람들은 이런 말을 하더군요. 최대한 프로그래머에게 구현의 자유를 주기위해서라고요. 자유를 많이 주는건 좋은데, 하나의 정의에 가능하면, 하나의 명확한 문법구조를 지정해 주면, 혼란이 덜할텐데, 굳이 두개 어떤때는 두개 이상의 의미를 부여하는거 같습니다.

  • @wwy125
    @wwy125 6 месяцев назад

    operator= 호출시 인자로 넘어간 String& rhs에 레퍼런스가 복사참조 될때에도 복사생성자가 호출되어야 하지 않은가? 답안 표시 expand_more volume_up 좋은 질문입니다. 일반적으로 참조자(reference)를 통해 객체를 전달할 때는 새로운 객체가 생성되지 않으므로 복사 생성자가 호출되지 않습니다. 참조자는 기존 객체의 별칭(alias) 역할을 하므로, 메모리 공간을 새로 할당하지 않고 기존 객체를 가리키기 때문입니다. 하지만, 여기서 String &rhs는 단순히 참조자를 전달하는 것이 아니라 복사 생성자의 매개변수로 사용되고 있습니다. 즉, String(const String &rhs) 형태의 복사 생성자는 rhs 객체를 복사하여 새로운 String 객체를 생성하는 역할을 합니다. 따라서, 복사 생성자 내부에서 rhs 객체의 멤버 변수(strData, len) 값을 복사하여 새로운 객체를 생성하고, 이때 깊은 복사(deep copy)를 통해 문자열 데이터를 복사하는 과정이 필요합니다. 만약 복사 생성자가 없거나 단순히 얕은 복사(shallow copy)를 수행한다면, 원본 객체와 복사된 객체가 같은 문자열 데이터를 가리키게 되어, 한쪽에서 문자열을 수정하면 다른 쪽에도 영향을 미치는 문제가 발생할 수 있습니다. 따라서, String &rhs와 같이 참조자를 사용하더라도 복사 생성자의 매개변수로 사용되는 경우에는 새로운 객체 생성과 깊은 복사를 통해 데이터를 안전하게 복사해야 합니다. share more_vert 즉, 깊은 복사를 수행하는 String(const String &rhs) 형태의 복사 생성자가 없으면, 생성자는 호출되지 않는가? edit 답안 표시 expand_more volume_up 네, 맞습니다. 만약 깊은 복사를 수행하는 String(const String &rhs) 형태의 복사 생성자가 정의되어 있지 않다면, 해당 형태의 복사 생성자는 호출되지 않습니다. C++에서는 복사 생성자가 명시적으로 정의되어 있지 않을 경우, 컴파일러가 기본 복사 생성자를 자동으로 생성합니다. 이 기본 복사 생성자는 얕은 복사(shallow copy)를 수행합니다. 얕은 복사는 객체의 멤버 변수 값을 단순히 복사하므로, 포인터 멤버 변수의 경우 메모리 주소만 복사됩니다. 이는 원본 객체와 복사된 객체가 같은 메모리 영역을 가리키게 되어 문제를 일으킬 수 있습니다. 따라서, 깊은 복사를 위한 복사 생성자를 명시적으로 정의하지 않으면, 컴파일러가 생성한 기본 복사 생성자(얕은 복사)가 호출됩니다. 이 경우, 문자열 데이터를 가리키는 포인터가 복사되므로, 원본 객체와 복사된 객체가 같은 문자열 데이터를 공유하게 되어 의도치 않은 결과를 초래할 수 있습니다. 결론적으로, 깊은 복사를 수행하는 복사 생성자를 명시적으로 정의해야만 해당 복사 생성자가 호출되어 객체의 멤버 변수를 안전하게 복사할 수 있습니다.

  • @wwy125
    @wwy125 6 месяцев назад

    new int[5]는 new int를 다섯번 실행한 꼴이므로, 메모리 구조는 5번의 new int와 동일할 것 같은데. 그러면 delete[] 에 의해 대치할수 있도록 , 컴파일러가 추론할수도 있지 않은가? edit 답안 표시 expand_more volume_up 흥미로운 질문입니다. new int[5]와 new int를 다섯 번 실행하는 것은 메모리 할당 측면에서는 유사해 보일 수 있습니다. 하지만 실제로는 몇 가지 중요한 차이점이 존재하며, 이로 인해 delete[]로 대체할 수 없습니다. 1. 메모리 구조의 차이: new int[5]: 연속된 메모리 블록을 할당하고, 배열의 시작 주소를 반환합니다. 또한, 컴파일러는 배열의 크기 정보를 별도로 저장하여 delete[] 연산 시 올바르게 메모리를 해제할 수 있도록 합니다. new int (5번): 각각 독립적인 메모리 블록을 할당하고, 각 블록의 시작 주소를 반환합니다. 각 블록의 크기 정보는 개별적으로 관리되며, delete[] 연산으로는 모든 블록을 한 번에 해제할 수 없습니다. 2. 컴파일러의 한계: 컴파일러는 new int[5]와 new int (5번)의 차이를 구분할 수 있습니다. 하지만 new int를 연속으로 다섯 번 호출했는지, 아니면 다른 코드 사이에 흩어져 호출했는지 알 수 없습니다. 따라서 컴파일러는 delete[] 연산을 안전하게 적용할 수 있는지 판단할 수 없으며, 개발자의 명시적인 지시가 필요합니다. 3. 안전성과 예측 가능성: C++는 메모리 안전성을 보장하기 위해 new와 delete, new[]와 delete[]의 쌍을 맞춰 사용하도록 규정하고 있습니다. 이 규칙을 어기면 예측할 수 없는 동작이 발생하거나 메모리 누수가 발생할 수 있습니다. 컴파일러가 임의로 delete[]를 적용하는 것은 이러한 안전성을 해칠 수 있습니다. 결론: new int[5]와 new int (5번)은 메모리 할당 측면에서 유사해 보이지만, 실제로는 중요한 차이점이 존재합니다. 컴파일러는 이러한 차이를 완벽하게 추론할 수 없으므로, 개발자가 명시적으로 delete[]를 사용해야 합니다. 이는 메모리 안전성을 보장하고 예측 가능한 동작을 유지하기 위한 필수적인 규칙입니다.

  • @wwy125
    @wwy125 6 месяцев назад

    저는 옛날에 C로 일했던 사람인데. 그때도 포인터가 어려웠습니다. 내가 아는 포인터 개념이 맞는지도 늘 불안불안 했었고, 그래서 pytutor라는 무료사이트 디버거로, 포인터 개념을 재확인 할겸 복습을 해서, 개념 정립을 다시 했습니다. 90%정도는 맞고, 10% 정도는 오류를 가지고 있었더군요. 이 사이트의 비쥬얼 디버깅 을 이용해 포인터 개념을 스스로 확립하시기를 추천드립니다. virtual 함수와 템플릿 개념 까지 지원되니, c++ 의 거의 대부분 개념 커버가 가능합니다. 최소한 일주일 이상은 이 툴로 씨름하셔야 할거라고 봅니다. 소스를 웹에 직접 올려볼려고 찾아봤지만, 어떤 이유에서인지, 제대로 내부 동작을 공개하지 않고 있는 상태이더군요. valgrind 메모리툴을 사용하는 것은 공개되어 있는데. 그 외 다른것들이 비공개이고, 공개할수 없는 이유가, 도커를 사용하여 , 리눅스에서 실행이 되는 것을 사이트에 보여주는 형태라, 공개하기에 너무 번거롭고, 복잡해서 라고 밝히고 있더군요.하옇튼, 교육용으로 아주 많이 쓰이고 있는 사이트라고 합니다

  • @대떱11
    @대떱11 6 месяцев назад

    현업에 쓸일이 없었는데 유익하네요.

  • @리미-j5u
    @리미-j5u 6 месяцев назад

    교수님 수업이 이해가 안가서 찾아왔어요 ,, 진짜 너무 감사드립니다

  • @ilove0908
    @ilove0908 7 месяцев назад

    클래스 정말 직관적으로 설명해주시네요. 너무 감사드립니다.

  • @itspeciallistdoy
    @itspeciallistdoy 8 месяцев назад

    8:35 레퍼런스변수(참조자)

  • @スモモスエイ
    @スモモスエイ 10 месяцев назад

    VS2022 를 쓰는 현시점에서는 포인터 값을 printf로 출력할 때 %d 대신 %p를 사용하는걸 권장한다고 합니다. printf("%d ", &a);라고 적으면 에러 C6273 (형식 불일치)가 뜹니다. printf("%p ", &a);로 바꿔주면 에러가 사라집니다.

  • @meoWhisper_kr
    @meoWhisper_kr 10 месяцев назад

    양질의 강의 감사합니다!

  • @songhs_0105
    @songhs_0105 11 месяцев назад

    감사합니다 😊

  • @Trilozi
    @Trilozi Год назад

    두들낙서님은 전역하셨는지요? 저는 최근에 전역하였습니다. 지금 두들낙서님의 책을 보며 공부하다가 생각나서 들렀습니다!

  • @김범수-d2x
    @김범수-d2x Год назад

    전역하셨을텐데 영상 다시 안 찍으시나용 ㅠ

  • @애베배베
    @애베배베 Год назад

    감사합니다 낙서님~~

  • @lmsn4184
    @lmsn4184 Год назад

    이해가 될랑 말랑

  • @lmsn4184
    @lmsn4184 Год назад

    String &operator= 이거 리턴값이 *this 인건 이제보니 또 예술이네 예술이야.. 볼때마다 하나씩 얻어가는 기분

  • @유희영-h5i
    @유희영-h5i Год назад

    마법같네

  • @유희영-h5i
    @유희영-h5i Год назад

    당신 고마워

  • @ernestkimm1958
    @ernestkimm1958 Год назад

    코드 앞에 #pragma warning(disable : 4996) 붙이니 #include <string.h> 없이 잘 돌아가네요....감사합니다.

  • @lmsn4184
    @lmsn4184 Год назад

    메모리에 대한 개념, 포인터 개념, 레퍼런스 개념 등 선행지식이 충분하면 가려운 부분 잘 긁어주는데, 애매하게 알듯말듯한 사람들이 보면 어렵긴하겠다

  • @lmsn4184
    @lmsn4184 Год назад

    으아아대가리깨진다

  • @lmsn4184
    @lmsn4184 Год назад

    난 이 영상을 이해했다

  • @유희영-h5i
    @유희영-h5i Год назад

    드디어 이해했네요..

  • @유희영-h5i
    @유희영-h5i Год назад

    늘 신세지고 있습니다 감사합니다

  • @user-ch5qe3wb4l
    @user-ch5qe3wb4l Год назад

    감사합니다 쉽게 알려주셔서 좋아요 ㅎ

  • @애베배베
    @애베배베 Год назад

    😮😮

  • @blairleee
    @blairleee Год назад

    할렐루야

  • @blairleee
    @blairleee Год назад

    할렐루야 감사합니다

  • @aufcl93
    @aufcl93 Год назад

    압도적 감사

  • @KongGPatG
    @KongGPatG Год назад

    정말... 가려운 부분 긁어주는 너무 시원한 강의에요ㅜㅜ 특히 포인터랑 주소등 개념이 헷갈렸던 저에게 너무 잘 맞네요

  • @HW-ms4nt
    @HW-ms4nt Год назад

    감사합니다. 그런데, Drv1을 가리키는데 왜 출력은 Drv2가 출력될까요? (Drv2::f())

  • @이다예-r3z
    @이다예-r3z Год назад

    안녕하세요 지금도 혹시 답변달아주시나요? 2번문제에서 for (int(&ln)[3] : arr) { for (int & col : ln) { cout << col << ' '; } cout << endl; } 이 코드 첫번째 줄 부분 왜 ln도 아니고 *ln도 아니고 &ln인지.. 왜 레퍼런스를 써야만하는지 이해가 안갑니다

  • @mutemonk9704
    @mutemonk9704 Год назад

    감사합니다

  • @닝먼
    @닝먼 Год назад

    08:21

  • @LSD-e8p
    @LSD-e8p Год назад

    C++강의 찾고있었는데 최고예요

  • @qdqdasas3298
    @qdqdasas3298 Год назад

    24~26줄에 선언된 오버로딩된 연산자 (*)를 이용하면 34번째 줄에서 다음과 같은 오류메세지가 뜹니다. 이러한 피연산자와 일치하는 "*"연산자가 없습니다. 피연산자의 형식이 Vector2*Vector2입니다. a를 벡터로 인식하는것 같은데 어떻게 해결해야 할까요?

  • @taeheonkim-pj6vb
    @taeheonkim-pj6vb Год назад

    안녕하세요 강의보다가 질문이있습니다. 함수 외부에 선언한 operator*을 class vector2 내부로 넣어서 static Vector2 operator*(const float a, const Vector2 b) { return Vector2(a * b.x, a * b.y); } 다음과 같이 선언해준후 Vector2 c5 = Vector2::operator*(1.6, a); 위와 같이 표현한후 디버깅을 해보는데 오류각 나네요. 위와 같이 static 으로 선언하여 class 내부로 넣을시 작동이 안되는 이유는 뭔가요? 시간되시면 답변 부탁드립니다 ㅠㅠ