생성자가 두 번 호출되는 이유

공식 Ranjan Nayak

어떻게 이해가 안 constructors work되나요?

여기에 객체를 선언했습니다 obj2. 그것은 abc()완벽하게 괜찮은 constructor를 호출 합니다.

하지만 내가 할당 할 때

obj2 =  100 

컴파일러가 클래스 객체에 정수 초기화를 허용하는 이유는 무엇입니까? 허용한다면 객체를 파괴하는 방법과 다른 매개 변수화 된 생성자를 호출하는 방법입니다.

이제 객체 destructor가 있기 때문에 왜 한 번만 호출 two됩니까?

하나는 더 컴파일러는, 내가이 한 의심 not doing anythingdefault constructor기본 생성자는 왜 required?

class abc{
public:
    int a, b;

    abc()
    {a = 0; b = 0;}

    abc(int x)
    {a = x;}

    ~abc()
    {std::cout << "Destructor Called\n";}
};
int main()
{
    abc obj1;
    cout << "OBJ1 " << obj1.a << "..." << obj1.b << "\n";
    abc obj2;
    cout << "OBJ2 " << obj2.a << "..." << obj2.b << "\n";
    obj2 = 100;
    cout << "OBJ2 " << obj2.a << "\n";
system("pause");
return 0;
}

output:

OBJ1 0...0
OBJ2 0...0
Destructor Called
OBJ2 100
매튜 엠.

쇼와 텔링을하고 모든 스페셜 멤버를 악기로 연주합시다 .

#include <iostream>

class abc{
public:
    int a, b;

    abc()
    { std::cout << "Default constructor\n"; a = 0; b = 0;}

    abc(int x)
    { std::cout << "Int constructor\n"; a = x;}

    abc(abc const& other): a(other.a), b(other.b)
    { std::cout << "Copy constructor (" << a << ", " << b << ")\n"; }

    abc& operator=(abc const& other) {
      std::cout << "Assignment operator (" << a << ", " << b << ") = (" << other.a << ", " << other.b << ")\n";
      a = other.a;
      b = other.b;
      return *this;
    }

    ~abc()
    {std::cout << "Destructor Called\n";}
};

int main()
{
    abc obj1;
    std::cout << "OBJ1 " << obj1.a << "..." << obj1.b << "\n";
    abc obj2;
    std::cout << "OBJ2 " << obj2.a << "..." << obj2.b << "\n";
    obj2 = 100;
    std::cout << "OBJ2 " << obj2.a << "\n";

    return 0;
}

그리고 우리는 이 출력 을 얻습니다 .

Default constructor
OBJ1 0...0
Default constructor
OBJ2 0...0
Int constructor
Assignment operator (0, 0) = (100, 0)
Destructor Called
OBJ2 100
Destructor Called
Destructor Called

따라서 라인 소스를 사용하여 조정 해 보겠습니다.

int main()
{
    abc obj1;
    // Default constructor

    std::cout << "OBJ1 " << obj1.a << "..." << obj1.b << "\n";
    // OBJ1 0...0

    abc obj2;
    // Default constructor

    std::cout << "OBJ2 " << obj2.a << "..." << obj2.b << "\n";
    // OBJ2 0...0

    obj2 = 100;
    // Int constructor
    // Assignment operator (0, 0) = (100, 0)
    // Destructor Called

    std::cout << "OBJ2 " << obj2.a << "\n";
    // OBJ2 100

    return 0;
    // Destructor Called
    // Destructor Called
}

당신은 대부분 모든 것을 가지고 있습니다. 우리가 놀라움을 조사해 보겠습니다.

첫 번째 놀랍게도 obj2나중에 값을 변경 하더라도 abc obj2;선언 시점에서 여전히 기본 생성자를 호출합니다.

두 번째 놀라움 : obj2 = 100실제로는을 의미 obj2.operator=(abc(100));합니다.

  • (이름이) 임시 빌드 abc에서abc(100)
  • 할당 obj2
  • 다음 문으로 이동하기 전에 임시 파일을 제거하십시오.

세 번째 놀라움 : 소멸자는 닫는 대괄호 바로 앞 }(그리고 예,) 범위 끝에서 호출됩니다 return. 당신이 사용하고 있기 때문에 system("pause")나는 당신이 Windows =>에 있다고 가정하지만 운이 좋으면 일시 중지를 끝내면 호출되므로 콘솔 Windows는 눈 깜짝 할 사이에 사라집니다. 보다 영구적 인 콘솔에서 프로그램을 시작하거나 추가 범위를 사용할 수 있습니다.

int main () {
  {
    // your code here
  }
  system("pause"); 
  return 0;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

생성자가 두 번 호출되는 이유

분류에서Dev

이 생성자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

viewDidLoad가 두 번 호출되는 이유

분류에서Dev

소멸자가 두 번 호출되지만 생성자는 한 번만 호출되는 이유는 무엇입니까?

분류에서Dev

내 C ++ 프로그램의 복사 생성자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

생성자가 두 번째로 호출되지 않는 이유는 무엇입니까?

분류에서Dev

내 프로그램에서 생성자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

awakeFromInsert가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

OnCollisionEnter가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

이 메서드가 두 번 호출되는 이유 (pytest)

분류에서Dev

클릭 핸들러가 두 번 호출되는 이유

분류에서Dev

파일 js가 두 번 호출되는 이유

분류에서Dev

JSF : 페이지의 초기로드시 두 번 호출되는 Bean 생성자

분류에서Dev

JSF : 페이지의 초기로드시 두 번 호출되는 Bean 생성자

분류에서Dev

OpenERP-레코드 생성 중에 create () 메서드가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

이 연결 목록 구현에서이 C ++ 생성자가 동일한 메모리 위치에서 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

SearchActivity에서 onNewIntent가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

지속 메서드가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

비동기 함수가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

Page_Load ()에서 내 메서드가 두 번 이상 호출되는 이유

분류에서Dev

이 메서드가 두 번 호출되는 이유를 모르겠습니다.

분류에서Dev

jquery에서 클릭 이벤트가 두 번 호출되는 이유

분류에서Dev

생성자가 배열의 두 번째 객체에 대한 호출을받지 못하는 이유

분류에서Dev

뷰가 TabView 내부에있을 때`.onAppear`가 두 번 호출되는 이유

분류에서Dev

SignalR Startup 클래스의 Configuration 메서드가 두 번 호출되는 이유

분류에서Dev

두 번 호출되는 Ajax 성공 데이터

분류에서Dev

사용자 정의 유형에 대한 파이썬 목록 생성자-길이가 두 번 호출 됨

분류에서Dev

이 프로그램의 소멸자가 두 번 호출되는 이유는 무엇입니까?

분류에서Dev

내 프로그램에서 연산자 ()가 두 번 호출되는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    생성자가 두 번 호출되는 이유

  2. 2

    이 생성자가 두 번 호출되는 이유는 무엇입니까?

  3. 3

    viewDidLoad가 두 번 호출되는 이유

  4. 4

    소멸자가 두 번 호출되지만 생성자는 한 번만 호출되는 이유는 무엇입니까?

  5. 5

    내 C ++ 프로그램의 복사 생성자가 두 번 호출되는 이유는 무엇입니까?

  6. 6

    생성자가 두 번째로 호출되지 않는 이유는 무엇입니까?

  7. 7

    내 프로그램에서 생성자가 두 번 호출되는 이유는 무엇입니까?

  8. 8

    awakeFromInsert가 두 번 호출되는 이유는 무엇입니까?

  9. 9

    OnCollisionEnter가 두 번 호출되는 이유는 무엇입니까?

  10. 10

    이 메서드가 두 번 호출되는 이유 (pytest)

  11. 11

    클릭 핸들러가 두 번 호출되는 이유

  12. 12

    파일 js가 두 번 호출되는 이유

  13. 13

    JSF : 페이지의 초기로드시 두 번 호출되는 Bean 생성자

  14. 14

    JSF : 페이지의 초기로드시 두 번 호출되는 Bean 생성자

  15. 15

    OpenERP-레코드 생성 중에 create () 메서드가 두 번 호출되는 이유는 무엇입니까?

  16. 16

    이 연결 목록 구현에서이 C ++ 생성자가 동일한 메모리 위치에서 두 번 호출되는 이유는 무엇입니까?

  17. 17

    SearchActivity에서 onNewIntent가 두 번 호출되는 이유는 무엇입니까?

  18. 18

    지속 메서드가 두 번 호출되는 이유는 무엇입니까?

  19. 19

    비동기 함수가 두 번 호출되는 이유는 무엇입니까?

  20. 20

    Page_Load ()에서 내 메서드가 두 번 이상 호출되는 이유

  21. 21

    이 메서드가 두 번 호출되는 이유를 모르겠습니다.

  22. 22

    jquery에서 클릭 이벤트가 두 번 호출되는 이유

  23. 23

    생성자가 배열의 두 번째 객체에 대한 호출을받지 못하는 이유

  24. 24

    뷰가 TabView 내부에있을 때`.onAppear`가 두 번 호출되는 이유

  25. 25

    SignalR Startup 클래스의 Configuration 메서드가 두 번 호출되는 이유

  26. 26

    두 번 호출되는 Ajax 성공 데이터

  27. 27

    사용자 정의 유형에 대한 파이썬 목록 생성자-길이가 두 번 호출 됨

  28. 28

    이 프로그램의 소멸자가 두 번 호출되는 이유는 무엇입니까?

  29. 29

    내 프로그램에서 연산자 ()가 두 번 호출되는 이유는 무엇입니까?

뜨겁다태그

보관