초기화 리스트 사용에 대해서
482
작성한 질문수 16
초기화 리스트를 사용할경우에 클래스 내부 클래스의 원하는 생성자를 호출 할 수 있는 차이가 있고
클래스 내부에있는 멤버 클래스? 가 기본 생성자가 없을경우에 반드시 초기화리스트를 사용해야 하는거군요.
또 생각해보면 기본생성자가 있다고 하더라도 초기화 리스트를 사용하지 않고 생성자 내부에서
_inventory = Inventory(20);
와 같은식으로 사용할때 결국 복사생성자로 복사가 될텐데
이전 강의에서 말씀하신것처럼 Inventory 클래스의 복사 생성자게 제대로 만들어져 있지 않으면 멤버 변수들 중에 간단히 복사가 안되는것들로 인한 문제가 생길수 도 있겠네요!
그리고 말씀하신 C++11 문법에 추가된 부분은 이 초기화리스트의 다른 표현방식 혹은 문법이라고 이해하면 될까요?
마지막으로 구태여 생성자에서 초기화 하는것과 초기화리스트에서 초기화 하는것에 대해 차이를 둔 점이
예전 전역변수를 초기화 하지않으면 .bss에 위치하고 상대적으로 exe파일 크기를 적게 잡아먹는것처럼
컴파일러 내부에서 최적화하는데 어떤 이점이 있어서 나눈건가요?
----수정이요----
다음 강의를 듣고 복사 연산자에 대해서 알게되고 다시 생성자 내부에서 초기화 하는
_inventory = Inventory(20);
위와 같은방식으로 했을때 여기서 =는 복사생성자가 아닌 복사 연산자로 작동을 하는군요?
생성자 내부에서 초기화 하려고하는건 결국 멤버내 클래스를 기본생성자로 생성하고(_inventory 생성)
추가로 뒷부분의 생성자로 생성된 임시 객체(Inventory(20))을 복사해서 넣는 식으로 작동하는군요!
그렇다면 클래스 내부의 멤버 클래스(_inventory )를 복사생성자로 생성하고 싶을때는
해당 클래스의 인수로 복사생성자로 만들고싶은 클래스를 받은 뒤 그걸 초기화리스트로 초기화 하는방법이
멤버클래스(_inventory )를 복사생성자로 생성시킬 수 있는 유일한 방법인가요? 이런식으로요
Knight(Inventory& i) : _inventory(i){}
답변 1
0
C++11의 initializer_list는 다른 아이인데 후반부에 나오고
: 뒤에 초기화를 하면 두 번 복사하지 않아 성능이 아주 미세하게 좋아집니다.
그리고 참조값처럼 문법적으로 : 뒤에서 값을 세팅해야 하는 경우도 있고
여튼 C++은 복잡하고 별별 상황이 있기 때문에
그냥 이런 저런 실습을 해보시기 바랍니다.
그리고 이런 세세 부분은 질문하시기 보다는
직접 실습을 통해 되는 것과 안 되는 것을 학습해보시기 바랍니다.
어차피 나중에도 본인이 연습한 것을 위주로 사용을 하게 됩니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
559
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
536
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
475
1
클래스 타입의 포인터 질문합니다
0
559
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
390
1
포인터 관련 질문합니다!
0
271
1
Unable to start assembler. Check your settings.
0
849
2
cpu선택
0
549
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
415
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
317
0
스택 프레임 질문합니다!
2
312
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
312
1
함수객체 의 매개변수
0
366
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
359
1
스택 오버플로우
2
801
1





