투표를하지 마십시오.이 문제에 대해 의문이 생깁니다.왜 new가 3 번 호출되고 delete가 3 번 호출됩니까?
저는 새 프로그램에 대한 과부하 및 삭제를 위해 간단한 프로그램을 사용하고 있습니다.
그냥 새로운 클래스에 대한 전역 오버로딩과 연산자 오버로딩을 시도했습니다.
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
void * operator new(size_t size)
{
cout<<"\n\nGlobal scope new:\n";
void * ptr = malloc(size);
return ptr;
}
void operator delete(void *ptr)
{
cout<<"\n\nGlobal scope delete:\n";
free(ptr);
}
class test
{
public:
int age;
string name;
test(string str, int a)
{
age = a;
name = str;
}
void display();
};
void test::display()
{
cout<<"\n\nname is:-"<<name<<" and age is :- "<<age<<endl;
}
int main()
{
test *t = new test("sanjeev",29);
if(t!=NULL)
cout<<"\n\nMemory allocated:"<<endl;
t->display();
delete t;
}
이제 내가 새가 3 회
내가 새로운 선언하고 클래스를 한 번만 내에서 연산자 오버로딩을 삭제하는 경우라고 3 번 호출 및 삭제되는 것을보고하고이 프로그램을 exectuing에 새 전화를 걸고 삭제가 진행 중입니다.
나를 도울 수있는 이유는 무엇입니까? 왜이 흐름이 일어나고 있으며,이 흐름 뒤에 이유가 있습니다.
그러면 지금 무슨 문제가 있습니까? 새로운 사실이며 delete는 메인에서 한 번만 새로운 것을 사용하고있을 때 세 번 호출됩니다. – Isuka
문제는 3 번 호출이 발생하는 이유입니다. 한 번 발생해야합니다.이 연산자가 클래스 내부에 오버로드를 선언하면 한 번만 호출됩니다. – user5794230
질문에 이미지를 사용하지 마십시오. 이미지에 텍스트가 포함되어 있으면 형식이 지정된 텍스트로 표시됩니다 (모든 행의 시작 부분에 4 개의 공백). 또한 모든 경고와 디버그 정보 ('g ++ -Wall -Wextra -g'와 함께 [GCC] (http://gcc.gnu.org/))로 코드를 컴파일하십시오. 디버거에서 단계별로 실행하십시오. 좋은 C++ 프로그래밍 책을 읽으려면 일주일이 걸릴 것입니다. –