C++Builder  |  Delphi  |  Kylix  |  Turbo-C  |  .NET  |  JBuilder  |  Together  |  FireBird
C++Builder Programming Forum º¼·£µåÆ÷·³ BorlandForum
 °æ°í! °Ô½Ã¹° ÀÛ¼ºÀÚÀÇ »çÀü Çã¶ô¾ø´Â ¸ÞÀÏÁÖ¼Ò ÃßÃâÇàÀ§ Àý´ë ±ÝÁö
C++ºô´õ Æ÷·³
Q & A
FAQ
ÆÁ&Æ®¸¯
°­ÁÂ/¹®¼­
ÀÚ·á½Ç
ÄÄÆ÷³ÍÆ®/¶óÀ̺귯¸®
¸Þ½ÅÀú ÇÁ·ÎÁ§Æ®
º¼·£µåÆ÷·³ Ȩ
Çìµå¶óÀÎ ´º½º
IT ´º½º
°øÁö»çÇ×
ÀÚÀ¯°Ô½ÃÆÇ
ÇØÇÇ ºê·¹ÀÌÅ©
°øµ¿ ÇÁ·ÎÁ§Æ®
±¸ÀÎ/±¸Á÷
ȸ¿ø ÀåÅÍ
°ÇÀÇ»çÇ×
¿î¿µÁø °Ô½ÃÆÇ
ȸ¿ø ¸Þ´º
ºÏ¸¶Å©
º¼·£µåÆ÷·³ ±¤°í ¸ðÁý

C++ºô´õ °­ÁÂ/¹®¼­
C++Builder Programming Tutorial&Docments
[201] ¿¬»êÀÚ new ÀÇ Áø½Ç
Lyn [tohnokanna] 2109 ÀÐÀ½    2009-08-18 18:12
new ¿¬»êÀÚÀÇ Áø½Ç

C++¿¡¼­´Â ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¶§ new ¿¬»êÀÚ¸¦ »ç¿ëÇÕ´Ï´Ù.
±×¸®°í ÀÌ new ¶ó´Â ¿¬»êÀÚ´Â ¿À¹ö·ÎµùÀÌ °¡´ÉÇÕ´Ï´Ù. ±×·³ °ú¿¬ ÀÌ new ÀÇ Á¤Ã¼´Â ¹»±î¿ä?
new ¸¦ È£ÃâÇÏ¸é ½ÇÁ¦·Î´Â malloc ÀÌ ³»ºÎ¿¡¼­ ´Ù½Ã È£Ãâ µÈ ´Ù´Â °ÍÀº ÀÏ´Ü ´Ù ¾È´Ù°í °¡Á¤ÇÏ°í ³Ñ¾î°¡°Ú½À´Ï´Ù.

ù ÄÚµå ³ª°©´Ï´Ù. ¿¬»êÀÚ new ¸¦ ¿À¹ö·Îµù ÇÑ °æ¿ìÀÔ´Ï´Ù.
#include 
#include 

class Test
{
public:
	int a;

	void* operator new(size_t size)
	{
		printf("ÇÑ °³ ÇÒ´çÁß\n");
		Test* temp = (Test*)malloc(size);
		return temp;
	}
	Test()
	{
		printf("Test Constructor\n");
	}
};
int main()
{
	Test* t1;

	t1 = new Test;

	system("pause");
	return 0;
}


new ¿¡´Â size_t ÇüÅÂÀÇ ÆÄ¶ó¸ÞÅͰ¡ Çϳª Á¸ÀçÇÕ´Ï´Ù. ÀÌ ÆÄ¶ó¸ÞÅÍ·Î ÇÒ´ç ÇØ¾ß ÇÒ Å©±â¸¦ ¾Ë·ÁÁÝ´Ï´Ù. ´Ü¼øÈ÷ ±× Å©±â·Î ¸Þ¸ð¸®¸¦ ÇÒ´ç ÇÏ°í ¸®ÅÏ ¸¸ ÇÏ¿³½À´Ï´Ù.

½ÇÇà°á°ú´Â ¾Æ·¡¿Í °°½À´Ï´Ù.



¿ì¸®´Â ºÎ¸¥Àûµµ ¾ø´Â »ý¼ºÀÚ°¡ È£ÃâµÇ¾ú½À´Ï´Ù. new °¡ ´Ü¼øÈ÷ ¸Þ¸ð¸® ÇҴ縸 Çϵµ·Ï ¿À¹ö·Îµù ÇÏ¿³´Âµ¥¿ä. ¿©±â¼­ new ´Â ½ÇÁ¦·Î´Â ¿À¹ö·ÎµùÀÌ µÇÁö ¾Ê¾Ò´Ù°í ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. ¹º°¡ ¼ö»óÇϱº¿ä. µð½º¾î¼Àºí ÇØ º¸¾Ò½À´Ï´Ù.



ÀÌ·± ¿ì¸®´Â new ¸¦ È£ÃâÇßÀ» »ÓÀε¥ ½ÇÁ¦·Î´Â operator new ¶ó´Â ÇÔ¼ö¿Í »ý¼ºÀÚ¸¦ µû·Îµû·Î È£Ãâ Çϰí ÀÖ¾ú³×¿ä. ±×·³ ¿ì¸®°¡ ¼öÁ¤ÇÑ °ÍÀº operator new ¶ó´Â ÇÔ¼ö ÀÏ »Ó new ¿¬»êÀÚ ÀÚü°¡ ¾Æ´Ï¶ó´Â°ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

½ÉÁö¾î À­ÁÙ¿¡¼­´Â ÇÒ´ç ÇÒ ¸Þ¸ð¸® Å©±â¸¦ ½ºÅÿ¡ Áý¾î³Ö¾îÁִ ģÀýÇÔ(?) ±îÁö ¿³º¼ ¼ö ÀÖ±º¿ä. Pop ÀÌ È£ÃâºÎÀ§ ¾Æ·¡¿¡ Á¸ÀçÇÑ´Ù´Â °ÍÀº operator new ´Â cdecl ¹æ½ÄÀ¸·Î call µÇ°í ÀÖ´Ù°í ÁüÀÛ ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù.

±×·³ new ´Â ´ÜÁö operator new ¿Í »ý¼ºÀÚ¸¦ È£Ãâ Çϰí ÀÖÀ» »ÓÀ̶ó¸é ÀÌ µÎ ÇÔ¼ö¸¦ µû·Î µû·Î È£ÃâÇϴ°͵µ °¡´ÉÇÏÁö ¾ÊÀ»±î¿ä? ´ÙÀ½°ú °°Àº Äڵ带 Â¥ º¸¾Ò½À´Ï´Ù.
#include 
#include 

class Test
{
public:
	int a;

	void* operator new(size_t size)
	{
		printf("ÇÑ °³ ÇÒ´çÁß\n");
		Test* temp = (Test*)malloc(size);
		return temp;
	}
	Test()
	{
		printf("Test Constructor\n");
	}
};
int main()
{
	Test* t1;

	t1 = (Test*)Test::operator new(sizeof(Test));
	t1:Test();

	system("pause");
	return 0;
}

±×¸®°í ½ÇÇà ÇØ º¸¾Ò½À´Ï´Ù.



ÀÌ·± ¿ÏÀüÈ÷ ¶È°°±º¿ä.


±×·³ ÀÌ·¸°Ô °á·Ð ³»¸± ¼ö ÀÖÀ»±î¿ä? new ¿¬»êÀÚ´Â operator new ÇÔ¼ö¸¦ È£Ãâ ÇÑ ÈÄ, »ý¼ºÀÚ¸¦ È£Ãâ ÇØ ÁÖ´Â ¿¬»êÀÚÀÌ´Ù.

±×·±µ¥ ÀÌ°Ô ¶Ç ¾Æ´Ñ°Å °°½À´Ï´Ù. ¿Ö³Ä¸é ÀÌ µÎ ÇÔ¼ö¿¡´Â VMT(Virtual Methor Table) À» »ý¼º ÇØ ÁÖ´Â ºÎºÐÀÌ ¾ø°Åµç¿ä. °¡»óÇÔ¼ö°¡ ÇÑ °³ ÀÌ»ó Á¸ÀçÇÏ°í »ó¼Ó°ü°è°¡ Àִ Ŭ·¡½º(»ó¼Ó ¹Þ¾Ò´ø »ó¼Ó Çß´ø) ¿¡´Â ¹Ýµå½Ã VMTÀÇ Æ÷ÀÎÅͰ¡ Á¸ÀçÇÕ´Ï´Ù. ±×·³ ÀÌ VMT´Â ¾ðÁ¦ µî·ÏµÇ¾úÀ»±î¿ä? »ì¦ Äڵ带 °íÃĺ¸¾Ò½À´Ï´Ù.

#include 
#include 

class Test
{
public:
	int a;

	void* operator new(size_t size)
	{
		printf("ÇÑ °³ ÇÒ´çÁß\n");
		Test* temp = (Test*)malloc(size);
		return temp;
	}
	Test()
	{
		printf("Test Constructor\n");
		func();
	}

	virtual void func()
	{
		printf("Test::func()\n");
	}
};

class Test2 : public Test
{
	virtual void func()
	{
		printf("Test2::func()\n");
	}
};
int main()
{
	Test* t1;

	t1 = new Test2;

	system("pause");
	return 0;
}


»ý¼ºÀÚ¿¡¼­ func¶ó´Â °¡»óÇÔ¼ö¸¦ È£Ãâ Çϰí ÀÖ½À´Ï´Ù.
¿ì¸®´Â Test2¸¦ »ý¼ºÇÏ¿´À¸¹Ç·Î Test2::func() °¡ Ãâ·Â µÉ °Å¶ó°í ±â´ë ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. °á°ú¸¦º¼±î¿ä?



¾î¶ó ¹º°¡ ÀÌ»óÇÕ´Ï´Ù. Test::func() °¡ Ãâ·ÂµÇ¾ú³×¿ä. ÀÌ°Ô ¾îÂî µÈ ÀÏÀϱî¿ä?
±× ÀÌÀ¯´Â »ý¼ºÀÚ¸¦ È£Ãâ ÇÏ´Â ½ÃÁ¡¿¡¼­´Â VMTÀÇ Æ÷ÀÎÅͰ¡ Á¦´ë·Î µî·Ï µÇÁö ¾Ê±â ¶§¹®¿¡, °¡»óÇÔ¼ö º»·¡ÀÇ ¿ªÇÒÀ» Á¦´ë·Î ÇÏÁö ¸øÇÏ´Â °Ì´Ï´Ù. µð½º¾î¼Àºí ÇÑ Äڵ带 º¸°Ú½À´Ï´Ù.



»ý¼ºÀÚ¸¦ È£Ãâ ÇÑ ´ÙÀ½¿¡µµ Ãß°¡ÀûÀÎ ÀÛ¾÷À» Çϰí ÀÖ½À´Ï´Ù.
±× Áß »¡°£ ³×¸ð·Î Ç¥½Ã µÈ ºÎºÐÀÌ °¡»óÇÔ¼ö°¡ ¾øÀ»¶§´Â Á¸ÀçÇÏÁö ¾Ê´ø ºÎºÐÀÔ´Ï´Ù.
Áï Àú ºÎºÐ¿¡¼­ VMTÆ÷ÀÎÅ͸¦ Ãß°¡ÇÏ´Â ÀÛ¾÷À» Çϰí ÀÖ´Ù°í »ý°¢ ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù.

ÀÌÁ¦ new ÀÇ Áø½ÇÀÌ ¹àÇô º±º¿ä.
new ¿¬»êÀÚ¸¦ È£ÃâÇϸé

1.    ¸Þ¸ð¸® ÇÒ´çÀ» À§ÇØ operator  new ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù
2.    »ý¼ºÀÚ¸¦ È£ÃâÇÑ´Ù
3.    VMT¸¦ µî·ÏÇØ ÁØ´Ù

ÀÌ 3°¡Áö °úÁ¤À¸·Î new ÀÇ ¿ªÇÒÀº ¸ðµÎ Á¾·áµË´Ï´Ù.
½±°í ÆíÇÏ°Ô ¾²´ø ¿¬»êÀÚ°¡ Âü ÇÏ´Â Àϵµ ¸¹³×¿ä : )

±×·³ ¶Ç ´Ù¸¥ ¾ð¾îÀÎ Delphi ÀÇ °æ¿ì´Â ¾î¶³±î¿ä?

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Test = class
  public
    a : Integer;

    procedure func;virtual;
    constructor Create;
  end;

  Test2 = class(Test)
  public
    procedure func;override;
  end;

constructor Test.Create;
begin
  func;
end;

procedure Test.func;
begin
  WriteLn('Test.Func');
end;

procedure Test2.func;
begin
  WriteLn('Test2.Func');
end;

var
  T : Test;
begin
  T := Test2.Create;
  ReadLn;
end.

Ãâ·Â °á°ú´Â ¾Æ·¡¿Í °°½À´Ï´Ù.



Delphi´Â »ý¼ºÀÚ È£Ãâ ½ÃÁ¡ÀÌ VMT »ý¼º ½ÃÁ¡º¸´Ù µÚÀÔ´Ï´Ù.
Áï Delphi ¿¡¼­´Â »ý¼ºÀÚ ³»¿¡¼­ °¡»óÇÔ¼ö¸¦ È£ÃâÇÏ´õ¶óµµ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÕ´Ï´Ù.
À强ȣ [nasilso]   2009-08-18 18:51 X
ÁÁÀº °­Á³׿ä.  Àß ºÃ½À´Ï´Ù.
À强ȣ [nasilso]   2009-08-18 19:29 X
CBuilder¿¡¼­ TObject¸¦ »ó¼Ó¹ÞÀ¸¸é
   - Delphi¶û ºñ½ÁÇØÁö³×¿ä (µð¾î¼ÀºíÄڵ带 º¸´Ï) »ý¼ºÀÚ Test2()°¡ ¹Ù·Î È£ÃâµÇ³×¿ä..
   - ±×¸®°í new ¿¬»êÀÚ ¿À¹ö·ÎµùÇØµµ µ¿ÀÛ¾ÈÇϱ¸..

...  
Å©·¹ºê [kkol]   2009-08-20 11:27 X
°­Á¿¡ ±×¸²ÀÌ ¾Èº¸À̴µ¥.. ÆÄÀÏ Å¬¸¯Çؼ­ º¸¸éµÇ±äÁö¸¸..
´Ù¸¥ºÐµéÀº º¸À̳ª¿ä?
ÈǸ¢ÇÑ ºÐ¼®ÀÔ´Ï´Ù. ~~ ^^

+ -
ÀÌÀü±Û:  LuaTinker C++ºô´õ¿¡¼­ »ç¿ëÇϱâ
´ÙÀ½±Û:  [Boost »ìÆìº¸±â] 8. Tokenizer

°ü·Ã ±Û ¸®½ºÆ®
201 ¿¬»êÀÚ new ÀÇ Áø½Ç Lyn 2109 2009-08-18
Google
Copyright © 2008, borlandforum.com. All right reserved.