코딩 해석을 하려하는데 잘 안되네요 도와주세요 (c++)
글쓴이: nk1222 / 작성시간: 목, 2020/02/13 - 5:00오후
#include <iostream> #include <memory> using namespace std; class smart{ int value; public: smart(int n): value(n) <---------------------인자 있는 생성자인건 알겠는데 value(n)??? { cout << "생성\n"; } ~smart()//소멸자 { cout << "소멸\n"; } operator int &()// 묵시적 형 변환 <-------------------------------묵시적 형변환이 뭔진 알겠는데 어떤식으로 변환을 시켜주고 어떤 기능을 하는지? { return value; } void print() { cout << "값:"<< value<<"\n"; } }; int main(){ unique_ptr<smart> p(new smart(99));//스마트 포인터 생성<---------------생성할때 어떤식을 생성되는지? cout << *p <<'\n';//smart 객체 접근후 출력 p->print();//객체 접근후 멤버(print함수) 접근 //unique_ptr 동작(smart 객체의 소멸자 작동) }
스마트포인터의 한 종류인 unique_ptr을 사용하는 예제 입니다.
그냥 코드가 전체적으로 이해가 잘 안됩니다..도와주세요..
Forums:
1. 소위 ctor-initializer라고 불리는
1. 소위 ctor-initializer라고 불리는 문법입니다. 이 경우 non-static data member인 value를 초기화해주는 거죠.
2. conversion function입니다. smart의 객체를 int & 타입으로 변환시키는 것이죠. 보시는 바와 같이 실제로 value에 대한 reference를 반환합니다.
3. smart 임시 객체를 new를 통해 생성하고, 그렇게 생성된 객체의 포인터를 unique_ptr의 생성자로 넘겨서 바로 unique_ptr 객체를 만드는군요.
뭐, 이건 코드 레벨 설명일 뿐이고, 구체적으로 무엇이 이해가 안 된다는 건지 알 수가 없네요.
2번에 conversion function
2번에서 smart의 객체를 int& 타입으로? 왜 굳이 value에 대한 레퍼런스를 반환하게하는지 궁금합니다.
실제로 저게 레퍼런스를 담고있어서 p를 출력하지 못하고 *p를 출력하게 하더라구요
친절한 설명 감사합니다.
p를 출력하지 못하고 *p를 출력하는 이유는
p를 출력하지 못하고 *p를 출력하는 이유는 value에 대한 reference를 반환하기 때문이 아니라,
p가 unique_ptr이기 때문입니다.
unique_ptr는 대부분의 상황에서 raw pointer처럼 사용될 수 있도록 설계되었으며, 따라서 역참조할 때도 *p와 같이 씁니다.
마지막까지 너무 감사드립니다 ^ㅡ^
그러니깐 결국은 *p로 출력하면 원래는 new smart(99)의 객체가 나와야하는데 객체이기에 값으로 표현 할 수없고,
그 객체를 묵시적 형변환해줌으로써(int&) p의값에는 return값인 value의 레퍼런스값이 들어가게된다 맞죠?
그래서 *출력하게되면 value 값이 나오는거고
맞나여~~?~?~?~?~?~?
"객체", "값"등의 용어를 어떤 의미로 사용하시는지
"객체", "값"등의 용어를 어떤 의미로 사용하시는지 확신할 수가 없어서 확답을 드릴 수가 없네요. 어떻게 이해하고 계신 건지 잘 모르겠습니다.
도와주지마세요. 해결해주면원글을삭지우는분이네요.
도와주지마세요.
해결해주면원글을삭지우는분이네요.
세벌 https://sebuls.blogspot.kr/
그러면 이렇게
http://archive.is/jIpJR
삭제 안하는데요?
발자취 들어가보면 다 있는데 원글을 삭제한다는 소리는 무슨 근거로 말씀하시는지요?
해결이라고 올렸던거는 올렸는데 단순한 문제였고, 제 혼자 힘으로 해결하게되어서 글을 삭제하는 방법을 모르기에 해결로 수정해 둔것이고 관리자님께서 그걸 보시고
몇몇개 삭제해 주시는거 같습니다. 앞뒤 사정 보시지도 않고 사람을 몰이 하시는게 기분이 나쁘네요
세벌님 사과부탁드릴게요
Quote:해결이라고 올렸던거는 올렸는데 단순한
그런 걸 삭제라고 부르는 겁니다.
공공 QnA 게시판에 질문을 올렸던 사람이 더 이상 그 질문을 남겨둬서 얻을 이익이 없다고 판단하고 질문 내용을 없애 버린다면, 그 질문글로 인하여 다른 사람이 도움을 받을 가능성을 제거하는 것이지요. 먹튀 성향이 있다고 판단하기에 충분한 근거가 됩니다.
귀하의 경우에는 실제로 그 게시글에 다른 사람의 답변을 받았던 게 아니라 문제를 스스로 해결하였던 것이기에 억울하실 수도 있겠습니다. 자신이 알아낸 내용을 자문자답하는 식으로 같이 올려두었다면 물론 가장 좋았겠지만, 그렇게 하지 않았다고 나쁘게 판단할 생각은 없습니다.
하지만 질문 내용을 지우는 건 무슨 의도였다고 해석해야 할까요?
철자를 틀려서 에러가 났기에
잘못 올렸다고 판단해서 지운게 먹튀성향이 있다고 판단이 된다는건가요?
뭔 논리인지 잘 모르겠습니다.
제가 막말로 답변을 받은것도 아니고,
문제에있어서 코드 자체에 대해서 제가 혼자 해결했다면
그 부분을 제가 스스로 답변을 올려도 됐겠지요
무슨의도는요 철자틀려놓고 에러난다고 올린 제자신이 창피해서 그런건데
그것도 문제되나요? 답변 부탁드릴게요
늘 그렇지만, 중요한 건 귀하의 원래 의도가 아닙니다
늘 그렇지만, 중요한 건 귀하의 원래 의도가 아닙니다.
귀하의 행동의 결과가 남의 눈에 어떻게 해석되느냐가 문제죠.
뒤늦게 "원래 그런 의도가 아니었는데 그게 무슨 큰 문제냐"고 따져 봤자 무슨 소용이겠습니까.
삭제할 수도 있고 그렇죠 뭐. 창피해서 그럴 수도
삭제할 수도 있고 그렇죠 뭐. 창피해서 그럴 수도 있고, 5년 10년 후에 자신이 글 봤을 때 창피해서, 아니면 지인이 보면 창피해서 삭제할 수도 있고.. 사람마다 성향이 다른데, 그걸 너무 이상한 사람으로 몰아가는 것도 이상하다고 봅니다.
뭐, 그렇게 생각하시는 분이 있다면 더 논쟁할 생각은
뭐, 그렇게 생각하시는 분이 있다면 더 논쟁할 생각은 없습니다.
이 질문글에는 귀하께서 마저 답변하시면 되겠네요. 저는 손 떼겠습니다.
댓글 달기