클래스 인스턴스의 메모리 위치를 직접 반환하면 어떻게됩니까?

우자와 라 오마

주요 기능 코드 :

PNG* allocate(size_t w, size_t h) {
    PNG ret(w, h);
    return &ret;
}

int main() {
    PNG * image = allocate(256, 512);
    delete image;
    return 0;
}

적절한 PNG 클래스가 정의되어 있다고 가정합니다. 내 질문은 allocate (); 및 & ret. 일반적으로 함수가 호출 된 후 생성 된 모든 인스턴스가 지워집니다 (데이터 만 새로 복사 됨). 이 경우 & ret는 새로 생성 된 ret의 위치를 ​​가리 킵니다. 하지만 함수가 실행되면 ret이 삭제되고 결과적으로 PNG * 이미지가 격렬하게 동작하는 것 같습니다.

이것이 사실입니까? 그렇다면 코드를 수정하는 방법은 무엇입니까?

또한 이미지는 new로 생성되지 않으므로 delete 를 사용하는 것이 합리적 입니까?

Jon

귀하의 질문에 문자 그대로 대답하기 위해이 코드를 수정하는 방법은를 호출 delete한 결과로 제공되지 않은 포인터를 호출 하지 않는 것입니다 new.

delete 두 가지를 수행합니다.

  1. 객체의 소멸자를 호출합니다.
  2. 객체의 메모리를 런타임의 할당 자에게 다시 릴리스합니다.

이 경우에 ret생성 객체 allocate는 함수가 종료 될 때 자동으로 소멸되므로 소멸자를 호출 할 필요가 없습니다. 이 객체는 또한 런타임에서 제공하는 메모리에 할당되지 않았으므로 해당 메모리를 해제하는 것에 대해 이야기하는 것도 의미가 없습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

메인 클래스를 반환하려면 어떻게해야합니까?

분류에서Dev

같은 클래스에서 클래스의 인스턴스를 만들면 어떻게됩니까?

분류에서Dev

다른 클래스의 라이브러리 클래스에서 메서드에 직접 액세스하려면 어떻게해야합니까? 자바

분류에서Dev

어떻게 주어진 클래스의 하위 유형의 배열 클래스의 인스턴스를 반환?

분류에서Dev

작은 케이스 클래스의 모든 속성을 사용하여 Scala 케이스 클래스를 어떻게 인스턴스화합니까?

분류에서Dev

클래스의 인스턴스를 만들면 경고가 반환됩니까?

분류에서Dev

메모리 할당은 참조 클래스 또는 인스턴스 클래스를 기반으로합니까?

분류에서Dev

클래스의 한 객체에 대해 동적으로 메모리를 인수로 할당하면 어떻게됩니까?

분류에서Dev

RSpec을 사용하여 클래스 인스턴스에 대한 인스턴스 변수 / 접근자를 모의합니다.

분류에서Dev

모든 클래스 인스턴스를 동시에 참조하려면 어떻게합니까?

분류에서Dev

인터페이스 메서드를 직접 호출하려면 어떻게해야합니까?

분류에서Dev

해당 클래스의 인스턴스를 통해 클래스 속성을 설정하면 어떻게됩니까?

분류에서Dev

메인 mathod에서 동일한 클래스의 인스턴스를 생성하면 두 개의 인스턴스가 생성됩니까?

분류에서Dev

배열 멤버가있는 클래스의 인스턴스에 메모리가 어떻게 할당됩니까?

분류에서Dev

클래스의 인스턴스가 반환되면 모든 속성이 반환됩니까?

분류에서Dev

클래스의 인스턴스가 반환되면 모든 속성이 반환됩니까?

분류에서Dev

포인터를 사용하여 메모리 위치에 직접 액세스하는 방법은 무엇입니까?

분류에서Dev

한 클래스의 메서드를 사용하여 Java에서 다른 인스턴스를 만들려면 어떻게해야합니까?

분류에서Dev

__radd__를 사용하여 Python에서 할 수있는 것처럼 인스턴스가 Java에서 직접 필드의 문자열을 반환하도록하려면 어떻게해야합니까?

분류에서Dev

어레이 이름에 무언가를 추가하고 메모리 위치에 액세스하려고하면 어떻게됩니까?

분류에서Dev

메서드에서 제네릭 클래스를 반환하려면 어떻게해야합니까?

분류에서Dev

TreeMap 내에서 현재 클래스의 인스턴스를 값으로 어떻게 반환합니까?

분류에서Dev

클래스의 변수 인스턴스를 업데이트하기 위해 클래스의 메서드를 사용하는 것이 옳습니까? 그렇다면 어떻게해야합니까?

분류에서Dev

하위 클래스의 인스턴스에서 typescript의 정적 속성에 어떻게 액세스합니까?

분류에서Dev

JavaScript 클래스 인스턴스를 다른 클래스의 인스턴스로 만들려면 어떻게해야합니까?

분류에서Dev

직접 주입을 사용하는 클래스를 어떻게 확장합니까?

분류에서Dev

모든 클래스의 인스턴스 수가 아니라 모든 클래스의 수에 대한 수를 반환하는 방법

분류에서Dev

해당 클래스의 인스턴스를 반환하는 정적 메서드

분류에서Dev

자신의 인스턴스를 반환하는 메서드로 별칭이 지정된 클래스를 모의하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    메인 클래스를 반환하려면 어떻게해야합니까?

  2. 2

    같은 클래스에서 클래스의 인스턴스를 만들면 어떻게됩니까?

  3. 3

    다른 클래스의 라이브러리 클래스에서 메서드에 직접 액세스하려면 어떻게해야합니까? 자바

  4. 4

    어떻게 주어진 클래스의 하위 유형의 배열 클래스의 인스턴스를 반환?

  5. 5

    작은 케이스 클래스의 모든 속성을 사용하여 Scala 케이스 클래스를 어떻게 인스턴스화합니까?

  6. 6

    클래스의 인스턴스를 만들면 경고가 반환됩니까?

  7. 7

    메모리 할당은 참조 클래스 또는 인스턴스 클래스를 기반으로합니까?

  8. 8

    클래스의 한 객체에 대해 동적으로 메모리를 인수로 할당하면 어떻게됩니까?

  9. 9

    RSpec을 사용하여 클래스 인스턴스에 대한 인스턴스 변수 / 접근자를 모의합니다.

  10. 10

    모든 클래스 인스턴스를 동시에 참조하려면 어떻게합니까?

  11. 11

    인터페이스 메서드를 직접 호출하려면 어떻게해야합니까?

  12. 12

    해당 클래스의 인스턴스를 통해 클래스 속성을 설정하면 어떻게됩니까?

  13. 13

    메인 mathod에서 동일한 클래스의 인스턴스를 생성하면 두 개의 인스턴스가 생성됩니까?

  14. 14

    배열 멤버가있는 클래스의 인스턴스에 메모리가 어떻게 할당됩니까?

  15. 15

    클래스의 인스턴스가 반환되면 모든 속성이 반환됩니까?

  16. 16

    클래스의 인스턴스가 반환되면 모든 속성이 반환됩니까?

  17. 17

    포인터를 사용하여 메모리 위치에 직접 액세스하는 방법은 무엇입니까?

  18. 18

    한 클래스의 메서드를 사용하여 Java에서 다른 인스턴스를 만들려면 어떻게해야합니까?

  19. 19

    __radd__를 사용하여 Python에서 할 수있는 것처럼 인스턴스가 Java에서 직접 필드의 문자열을 반환하도록하려면 어떻게해야합니까?

  20. 20

    어레이 이름에 무언가를 추가하고 메모리 위치에 액세스하려고하면 어떻게됩니까?

  21. 21

    메서드에서 제네릭 클래스를 반환하려면 어떻게해야합니까?

  22. 22

    TreeMap 내에서 현재 클래스의 인스턴스를 값으로 어떻게 반환합니까?

  23. 23

    클래스의 변수 인스턴스를 업데이트하기 위해 클래스의 메서드를 사용하는 것이 옳습니까? 그렇다면 어떻게해야합니까?

  24. 24

    하위 클래스의 인스턴스에서 typescript의 정적 속성에 어떻게 액세스합니까?

  25. 25

    JavaScript 클래스 인스턴스를 다른 클래스의 인스턴스로 만들려면 어떻게해야합니까?

  26. 26

    직접 주입을 사용하는 클래스를 어떻게 확장합니까?

  27. 27

    모든 클래스의 인스턴스 수가 아니라 모든 클래스의 수에 대한 수를 반환하는 방법

  28. 28

    해당 클래스의 인스턴스를 반환하는 정적 메서드

  29. 29

    자신의 인스턴스를 반환하는 메서드로 별칭이 지정된 클래스를 모의하는 방법은 무엇입니까?

뜨겁다태그

보관