1. ¶
- die 해. . 호하. ? .
~cpp #include <iostream> using namespace std; class Foo{ public: int id; Foo(){ static idSequance = 0; id = idSequance++; cout << "Create! id = " << id << endl; } void die(){ cout << "I suicide. Id is " << id << endl; delete this; // } void sayMyId(){ cout << "My Id is no " << id << endl; } void sayHello(){ cout << "say Hello" << endl; } }; int main(int argc, char** argv) { cout << endl << ":::::: Case 1 - 할 " << endl; Foo* foo1 = new Foo();// Create! 한. foo1->sayHello(); // Hello foo1->sayMyId(); // id foo1->die(); // foo1->sayHello(); // foo1->sayMyId(); // // id 확 cout << endl << ":::::: Case 2 - id 확" << endl; Foo* foo2 = new Foo();// Create! 한. foo2->sayHello(); // Hello World foo2->sayMyId(); // id foo2->die(); foo2->sayHello(); foo2->sayMyId(); cout << endl << ":::::: Case 3 - 포 NULL 하 호하 " << endl; Foo* foo3 = NULL; // 한 . foo3->sayHello(); // Hello 한. //foo3->sayMyId(); // debug, release 할 . //foo3->die(); // debug, release 할 . cout << endl << ":::::: Case3 - " << endl; Foo foo4; foo4.sayHello(); // Hello World foo4.sayMyId(); // id foo4.die(); // debug mode assertion error foo4.sayHello(); // release foo4.sayMyId(); // release cout << endl; return 0; }. 해, 해 해 한 .
~cpp :::::: Case 1 - 할 Create! id = 0 say Hello My Id is no 0 I suicide. Id is 0 say Hello My Id is no 3604872 :::::: Case 2 - id 확 Create! id = 1 say Hello My Id is no 1 I suicide. Id is 1 say Hello My Id is no 3604872 :::::: Case 3 - 포 NULL 하 호하 say Hello :::::: Case3 - Create! id = 2 say Hello My Id is no 2 I suicide. Id is 2 say Hello My Id is no 2 Press any key to continue
2.1. Case1 - 할 ¶
~cpp Foo* foo1 = new Foo(); // Create! 한. foo1->sayHello(); // Hello World foo1->sayMyId(); // id foo1->die(); // . foo1->sayHello(); // 호 ? foo1->sayMyId(); // ..--;
2.2. Case2 - 포 NULL 하 호하 ¶
~cpp Foo* foo2 = NULL; // 한 . foo2->sayHello(); // Hello 한.(--;) foo2->sayMyId(); // debug, release 할 . foo2->die(); // debug, release 할 .
3.1. C++ 클 . ¶
파 해 . class 하 파하 class Data 할 "class " 합.
~cpp class Foo{ public: int id; // <- . };C++ Strong typed language 파 형 , 할 . 하 한합.
~cpp Foo foo4;new 키 할 runtime class instance 합. 해 id int class "class " 합.
, class struct 키 하 한 . , class 해 하, 하 foo 해 한 member 함 호할 .
, 파 , new 할 파 type 함 호 효 확하, 한 함 포 함 호하 . 행할 합.
class instance vpt, 한 pointer 합. 하 .
3.2. instance 함 행해 . ¶
파 . 파 member 함 호 함 행 키 함 포 하. .
C++ 표 함 호, instance 함 호 . 함 함 함 행 , 한 함 포 해 호합.
한 , 한 .
함 한 함 형태 instance 하?
함 한 함 형태 instance 하?
하,
~cpp class Foo{ public: int id; void sayMyId(){ cout << "My Id is no " << id << endl; } };함 instance id 합.
~cpp Foo::sayMyId()
함 행 함 팅, id 할 . C++ 한 class 함 해 class 포 해 해하 . ,
~cpp Foo:sayMyId()함 행 함 파
~cpp Foo:sayMyId(Foo* x)형태 함 하, 행할 . , 호한
~cpp Foo*
~cpp foo1->sayMyId(foo1);형태 함 포 팅해 함 행합.
C++ 한 황한 C 파 호환 키 OOP 합.
. 한 class static 함 하 instance 호할 instance 하 하 . static 함 하 pointer 팅하 함 호합.
탕 .3.3. 해 해 . ¶
행하,
~cpp Foo* foo1 = new Foo(); // Create! 한. foo1->sayHello(); // Hello foo1->sayMyId(); // id foo1->die(); // foo1->sayHello(); // foo1->sayMyId(); //
.( 플)
. (C++ ) ,
~cpp Create! id = 0 say Hello My Id is no 0 I suicide. Id is 0 say Hello // (delete this) 행 My Id is no 3604872 // (delete this) 행
~cpp sayHello() sayMyId()
. member 함 호하 해했 ~cpp sayHello() -> sayHello(Foo*) sayMyId() -> sayMyId(Foo*)형태 호 할 . 하 함 .
sayHello() instance variable 하 ,
~cpp sayMyId()
한 ., (?) 해 해 instance 행해 id 하 .
~cpp say Hello (delete this) 행 My Id is no 3604872 (delete this) 행instance , 해 process , 팅 . delete this 해 instance ""하 , 플 .
~cpp delete xx 화키 . 화킬 . call by value x NULL , 향 , 화킬 .
파, system 환하 한, access . 한 효 플 .
foo2~3 한 해 해할 .
foo2 C++ . (foo3 )
~cpp Foo* foo2 = NULL; // 한 . foo2->sayHello(); // Hello 한.
~cpp say Hello합. 호 형태
~cpp Foo::sayHello(foo2) -> Foo::sayHello(NULL), sayHello pointer NULL 한 하 .
OOP 행할 instance 한 , 행. C++ 함 행 해 instance 하 . 할 . NULL 0 pointer 해하.
5. Java 한 . ¶
instance 하 Java .
(행 null 하, instance pool instance pointer 해 하 합. )
~cpp // Main.java file class Foo{ public int a; void sayHello(){ System.out.println("Hello"); } } public class Main { public static void main(String[] args) { Foo foo= null; foo.sayHello(); } }행하, exception 합. Java Language Specification 2nd (3rd .) jvm specification 하.
(행 null 하, instance pool instance pointer 해 하 합. )
~cpp java.lang.NullPointerException at Main.main(Main.java:19) Exception in thread "main"
C++ NULL 키 하 , 0 확히 합. vm null 해하 키 하 합.