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 고 .