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 해하 키 하 합.









