私はこれに疑問を持っています。これは疑問です。なぜ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;
}
は今、このプログラムをexectuingに私は新しい宣言し、クラス内で一度だけ演算子オーバーロードを削除する場合は3回
と呼ばれる新しいが3回と呼ばれ、削除されていることを見ています新しいものを呼び出すと削除が起こっています。
この流れが起こっている理由とこの流れの背後にある理由は、私を助けてくれる人もいます。
あなたの問題は何ですか?それは事実であり、あなたがメインで一度だけ新しい自分を使用しているときに、削除は3回呼び出されますか? – Isuka
問題は3回の呼び出しが起こっている理由です。このオペレータがクラス内でオーバーロードを宣言すると、1回のみ発生します。 – user5794230
あなたの質問にはイメージを避けてください。あなたのイメージにはテキストが含まれています。フォーマットされたテキストとして表示されます(各行の先頭に4つのスペースがあります)。また、すべての警告とデバッグ情報( 'g ++ -Wall -Wextra -g'と[GCC](http://gcc.gnu.org/))でコードをコンパイルしてください。デバッガでステップバイステップで実行します。良いC++プログラミングの本を読むのに一週間かかる。 –