코딩 해석을 하려하는데 잘 안되네요 도와주세요 (c++)

nk1222의 이미지

#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을 사용하는 예제 입니다.
그냥 코드가 전체적으로 이해가 잘 안됩니다..도와주세요..

익명 사용자의 이미지

1. 소위 ctor-initializer라고 불리는 문법입니다. 이 경우 non-static data member인 value를 초기화해주는 거죠.

2. conversion function입니다. smart의 객체를 int & 타입으로 변환시키는 것이죠. 보시는 바와 같이 실제로 value에 대한 reference를 반환합니다.

3. smart 임시 객체를 new를 통해 생성하고, 그렇게 생성된 객체의 포인터를 unique_ptr의 생성자로 넘겨서 바로 unique_ptr 객체를 만드는군요.

뭐, 이건 코드 레벨 설명일 뿐이고, 구체적으로 무엇이 이해가 안 된다는 건지 알 수가 없네요.

nk1222의 이미지

2번에서 smart의 객체를 int& 타입으로? 왜 굳이 value에 대한 레퍼런스를 반환하게하는지 궁금합니다.
실제로 저게 레퍼런스를 담고있어서 p를 출력하지 못하고 *p를 출력하게 하더라구요
친절한 설명 감사합니다.

익명 사용자의 이미지

p를 출력하지 못하고 *p를 출력하는 이유는 value에 대한 reference를 반환하기 때문이 아니라,
p가 unique_ptr이기 때문입니다.

unique_ptr는 대부분의 상황에서 raw pointer처럼 사용될 수 있도록 설계되었으며, 따라서 역참조할 때도 *p와 같이 씁니다.

nk1222의 이미지

그러니깐 결국은 *p로 출력하면 원래는 new smart(99)의 객체가 나와야하는데 객체이기에 값으로 표현 할 수없고,
그 객체를 묵시적 형변환해줌으로써(int&) p의값에는 return값인 value의 레퍼런스값이 들어가게된다 맞죠?
그래서 *출력하게되면 value 값이 나오는거고
맞나여~~?~?~?~?~?~?

익명 사용자의 이미지

"객체", "값"등의 용어를 어떤 의미로 사용하시는지 확신할 수가 없어서 확답을 드릴 수가 없네요. 어떻게 이해하고 계신 건지 잘 모르겠습니다.

세벌의 이미지

도와주지마세요.
해결해주면원글을삭지우는분이네요.

익명 사용자의 이미지

nk1222의 이미지

발자취 들어가보면 다 있는데 원글을 삭제한다는 소리는 무슨 근거로 말씀하시는지요?
해결이라고 올렸던거는 올렸는데 단순한 문제였고, 제 혼자 힘으로 해결하게되어서 글을 삭제하는 방법을 모르기에 해결로 수정해 둔것이고 관리자님께서 그걸 보시고
몇몇개 삭제해 주시는거 같습니다. 앞뒤 사정 보시지도 않고 사람을 몰이 하시는게 기분이 나쁘네요
세벌님 사과부탁드릴게요

익명 사용자의 이미지

Quote:
해결이라고 올렸던거는 올렸는데 단순한 문제였고, 제 혼자 힘으로 해결하게되어서 글을 삭제하는 방법을 모르기에 해결로 수정해 둔것이고

그런 걸 삭제라고 부르는 겁니다.

공공 QnA 게시판에 질문을 올렸던 사람이 더 이상 그 질문을 남겨둬서 얻을 이익이 없다고 판단하고 질문 내용을 없애 버린다면, 그 질문글로 인하여 다른 사람이 도움을 받을 가능성을 제거하는 것이지요. 먹튀 성향이 있다고 판단하기에 충분한 근거가 됩니다.

귀하의 경우에는 실제로 그 게시글에 다른 사람의 답변을 받았던 게 아니라 문제를 스스로 해결하였던 것이기에 억울하실 수도 있겠습니다. 자신이 알아낸 내용을 자문자답하는 식으로 같이 올려두었다면 물론 가장 좋았겠지만, 그렇게 하지 않았다고 나쁘게 판단할 생각은 없습니다.

하지만 질문 내용을 지우는 건 무슨 의도였다고 해석해야 할까요?

nk1222의 이미지

잘못 올렸다고 판단해서 지운게 먹튀성향이 있다고 판단이 된다는건가요?
뭔 논리인지 잘 모르겠습니다.
제가 막말로 답변을 받은것도 아니고,
문제에있어서 코드 자체에 대해서 제가 혼자 해결했다면
그 부분을 제가 스스로 답변을 올려도 됐겠지요
무슨의도는요 철자틀려놓고 에러난다고 올린 제자신이 창피해서 그런건데
그것도 문제되나요? 답변 부탁드릴게요

익명 사용자의 이미지

늘 그렇지만, 중요한 건 귀하의 원래 의도가 아닙니다.

귀하의 행동의 결과가 남의 눈에 어떻게 해석되느냐가 문제죠.

뒤늦게 "원래 그런 의도가 아니었는데 그게 무슨 큰 문제냐"고 따져 봤자 무슨 소용이겠습니까.

익명 사용자의 이미지

삭제할 수도 있고 그렇죠 뭐. 창피해서 그럴 수도 있고, 5년 10년 후에 자신이 글 봤을 때 창피해서, 아니면 지인이 보면 창피해서 삭제할 수도 있고.. 사람마다 성향이 다른데, 그걸 너무 이상한 사람으로 몰아가는 것도 이상하다고 봅니다.

익명 사용자의 이미지

뭐, 그렇게 생각하시는 분이 있다면 더 논쟁할 생각은 없습니다.

이 질문글에는 귀하께서 마저 답변하시면 되겠네요. 저는 손 떼겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.