delete 와 new

프로그래밍 2011. 11. 3. 16:24
new는 객체를 메모리에 할당, delete는 할당된 객체를 삭제... 인듯 하다

그런데 new [] 와 delete[] 라는 키워드도 존재하는 듯하다. 

좀더 자세히 풀어보면

new  -> 객체 한개를 동적으로 할당하고 초기화
delete  -> 할당된 객체 한개를 삭제
new []  -> 객체 배열을 동적으로 할당하고 초기화
delete []  -> 할당된 객체 배열 하나하나를 없애고 배열을 삭제

인듯 하다.

이렇게 new 와 new [] , delete 와 delete [] 키워드로 분리한 이유는

객체 하나의 정보만 저장한다면 배열의 갯수를 표현하는 부분이 필요 없으니까 그 부분을 절약하기 위해 그런듯하다.
new 연산자로 할당한건 객체만, new [] 연산은 배열 갯수 + 객체 X 갯수 로 표현하는듯.

'프로그래밍' 카테고리의 다른 글

예외처리  (0) 2011.11.05
C++ 생성자와 소멸자  (0) 2011.11.03
virtual class  (0) 2011.11.03
C++ 상속  (0) 2011.11.03
프리미티브 타입  (0) 2011.11.03

설정

트랙백

댓글

생성자는 조금 들어봤는데 소멸자는 처음 들어봤다.

class A {
  A() // 생성자
  {
    ~~
  }
  ~A() // 소멸자
  {
    ~~
  }


이런 형태로 쓰이는 거 같다

생성자는 객체를 생성할때, 소멸자는 객체를 없앨때(delete를 이용하는듯) 사용하나보다

'프로그래밍' 카테고리의 다른 글

예외처리  (0) 2011.11.05
delete 와 new  (0) 2011.11.03
virtual class  (0) 2011.11.03
C++ 상속  (0) 2011.11.03
프리미티브 타입  (0) 2011.11.03

설정

트랙백

댓글

#include <gtkmm.h>
#include <iostream>

#include "config.h"

#ifdef ENABLE_NLS
#  include <libintl.h>
#endif

Gtk::Window* main_win = 0;

/* For testing propose use the local (not installed) ui file */
/* #define UI_FILE PACKAGE_DATA_DIR"/gtk_test_1/ui/gtk_test_1.ui" */
#define UI_FILE "src/gtk_test_1.ui"

Glib::RefPtr<Gtk::Builder> builder;

Glib::ustring id;
Glib::ustring pass;

Gtk::Entry* idbox = 0;
Gtk::Entry* passbox = 0;

void destroy()
{
exit(0);
}

void debug_on_console()
{
printf("successed debug\n") ;
}

void test()
{
if(idbox)
{
id = idbox->get_text();
}
if(passbox)
{
pass = passbox->get_text();
}
if(id == "1234" && pass == "1234")
{
Gtk::MessageDialog dialog(*main_win,"로그인 성공!",false);
dialog.run();
}
else
{
}
}

int
main (int argc, char *argv[])
{
//pair < int , int > ttwa ;
Gtk::Main kit(argc, argv);

//Load the Glade file and instiate its widgets:
try
{
builder = Gtk::Builder::create_from_file(UI_FILE);
}
catch (const Glib::FileError & ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
builder->get_widget("main_window", main_win);
builder->get_widget("pwbox", passbox);
builder->get_widget("idbox", idbox);
if (main_win)
{
Gtk::Button* btnexit = 0;
Gtk::Button* btnok = 0;
Gtk::Button* btnclose = 0;
builder->get_widget("btnexit", btnexit);
if(btnexit)
{
btnexit->signal_clicked ().connect(sigc::ptr_fun (&destroy));
}
builder->get_widget("btnlogin", btnok);
if(btnok)
{
btnok->signal_clicked ().connect (sigc::ptr_fun(&test));
}
kit.run(*main_win);
}
return 0;
}

void testing()
{
printf("TEST");
}

Glade의 도움을 받아 UI를 작성하고 코드에서 불러오는 형태이다.

위에 나온거처럼 signal_type().connect(sigc::ptr_fun(&함수이름)); 의 형식으로 시그널과 함수를 이어주는 역활을 한다. 근데 이상하게 인자값이 존재하는 함수를 해봤을땐 에러가 나서 어떻게 값을 주고받지...하고 고민하다가 결국 Gtk::Entry와 Glib::ustring(Entry에서 텍스트를 뽑아오는 함수 get_text()의 리턴값이 Glib::ustring 이다)을 전역변수로 사용하는 길을 택했다.

기능은 login버튼을 눌렀을때 맨위 상자에 1234, 두번째 상자에도 1234라는 값이 있으면 다이얼로그를 띄우는 형식이다.

'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글

본격 Gtk에서 Cairo 사용하기  (0) 2011.11.15
gtkmm! Anjuta!  (0) 2011.11.02
gtkbuilder의 사용  (0) 2011.06.09

설정

트랙백

댓글

virtual class

프로그래밍 2011. 11. 3. 12:57
http://kldp.org/node/2182

http://www.winapi.co.kr/clec/cpp3/29-3-3.htm

c++에서

class A
{
 int a;


class B : public A
{
 int b;


class C : public A
{
 int c;
}
 
class D : public B, public C
{
}

가 있다면
 
class D 안에서 a를 사용하면 어느쪽의 a인지 애매해진다. 또한 컴파일러가 에러를 내뱉는다.
이를  

class B : virtual public A

class C : virtual public A  

로 해주면 에러가 일어나지 않는다

이를 가상 기반 클래스 라고 부르는듯 하다. 이렇게 지정하면 두번 상속되더라도 한번만 상속을 하게 된다고 한다.

'프로그래밍' 카테고리의 다른 글

delete 와 new  (0) 2011.11.03
C++ 생성자와 소멸자  (0) 2011.11.03
C++ 상속  (0) 2011.11.03
프리미티브 타입  (0) 2011.11.03
C언어 키워드  (0) 2011.11.02

설정

트랙백

댓글

C++ 상속

프로그래밍 2011. 11. 3. 08:18

'프로그래밍' 카테고리의 다른 글

delete 와 new  (0) 2011.11.03
C++ 생성자와 소멸자  (0) 2011.11.03
virtual class  (0) 2011.11.03
프리미티브 타입  (0) 2011.11.03
C언어 키워드  (0) 2011.11.02

설정

트랙백

댓글

뭔지 몰라서 검색!

latokor.egloos.com/987046  

간단히 정리하자면

프리미티브 타입은 char, int, double 같은걸 말하는것 같다 

'프로그래밍' 카테고리의 다른 글

delete 와 new  (0) 2011.11.03
C++ 생성자와 소멸자  (0) 2011.11.03
virtual class  (0) 2011.11.03
C++ 상속  (0) 2011.11.03
C언어 키워드  (0) 2011.11.02

설정

트랙백

댓글

C언어 키워드

프로그래밍 2011. 11. 2. 20:17
오늘 여러 키워드에 대해 검색해봤다

먼저

extern.. 요놈은 걍 외부에서도 사용가능하게 지정하는 변수정도로만 알고 있었다.
그런데 extern "C"를 이용하면 컴파일러가 해주던 네임 맹글링(같은 이름의 함수와 변수를 구분가능하게 해주는 작업) 을 "안해주도록" 하여 일반 C함수이름으로 선언되게 하는거라고 한다.
한마디로 C++소스 내에서 exturn "C"로 덮혀있으면 C에서도 사용이 가능하게 되는것과 C++에서 C의 문법을 쓰게 해줄수 잇는것 같다.

그다음

volatile 이놈도 걍 컴파일러 최적화 안하기...정도로만 알고 있었는데 다음과 같은때에 쓴다고한다

a = 1;
a = 2; 
a = 3;
a = 4;
a = 5;

같은식으로 되어있으면 컴파일러는 a = 5;만 수행하도록 할것이다(그것이 제일 효율적이니까) 그러나 만약 a대신에 값이 들어가는 것마다 다른것이 일어나는... 예를들면 인터럽트같은걸 사용할때는 값마다 수행하는게 다르고 1,2,3,4,5 처럼 각각 들어가는 값이 다르지만 다 수행되야한다면 나머지를 지울수 없게 될것이고 따라서 컴파일러 최적화를 수행못하게 하기 위해 volatile을 써야하게 된다는 것이다. 

그리고 마지막으로 Null Pointer

널포인터, 걍 값없는거 아냐? 정도로만 생각했던 나에게 코웃음을 치며 제대로 모르는구나! 빨리 검색해봐! 라는 말에 검색하게 되었다.
#define NULL 0 으로 선언되어있다고 한다.(시스템마다 조금씩 틀릴것 같지만... 일단 내가본글에선 프로그래머가 NULL의 자세한 값을 알 필요가 없다는듯 하다.)
이 널포인터는 다른 포인터와 달리 0이란 값이 들어있고 "할당되지 않은 상태"라는 듯하다.
Gtk를 알려면 포인터를 제대로 알아야한다는 말을 듣고 포인터관련 자료를 찾고 정리하는 시간을 가져봐야겠다. 

'프로그래밍' 카테고리의 다른 글

delete 와 new  (0) 2011.11.03
C++ 생성자와 소멸자  (0) 2011.11.03
virtual class  (0) 2011.11.03
C++ 상속  (0) 2011.11.03
프리미티브 타입  (0) 2011.11.03

설정

트랙백

댓글

C++로 바인딩된 Gtk언어 gtkmm.
C++공부삼아 해보기로 결심했다.
Class, Public, Protected, Private, Vitual... 객체지향의 개념이 추가된 C...라는 느낌이기보단 C랑 많이 다르다는 느낌이 들었다.
Virtual이란 키워드... 가상함수? 자바의 abstract 과 비슷한 키워드인듯 하다.

Anjuta IDE라는 gtk개발툴. 몇개월전만 해도 별로였던거 같은데 제법 쓸만한 툴이 되었다.
glade랑 통합되어서 UI는 비주얼스튜디오의 도구상자처럼 Label이나 Button을 끌어다 디자인을 할 수 있다.
그다음 소스코드에서 불러와서 사용하면 끗!

제법 쓸만한 툴이 생긴거 같아서 기쁘다.
열심히 개발해야징 히힛.

'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글

본격 Gtk에서 Cairo 사용하기  (0) 2011.11.15
gtkmm 예제 프로그램  (0) 2011.11.03
gtkbuilder의 사용  (0) 2011.06.09

설정

트랙백

댓글

핑퐁 스크립트

기타 2011. 7. 14. 10:00
심심해서 만들어본 쉘스크립트.
쉘스크립트 내에서 반복하는 반복문 안에다가 '핑!'을 출력하고 1초쉬고 '퐁!'을 입력하고 1초 쉬는 스크립트다. 그리고 그것을 계속 반복한다

#!/bin/bash
num=0
while (( $num < 1 ))
do
 echo "핑!"
 sleep 1
 echo "퐁!"
 sleep 1
done

참고로 #!/bin/bash 부분을 #!/bin/sh 로 바꾸면 실행이 안된다... 어째서일까...

'기타' 카테고리의 다른 글

헝가리안 표기법!  (0) 2011.11.08
Nateon Client  (0) 2011.11.07
Lingr API 의 문제점  (0) 2011.11.04
ざわざわ  (0) 2011.06.07
잡담 여러개  (0) 2011.06.04

설정

트랙백

댓글

간략하게 보자면 session_start(); 로 시작해서 session_destroy(); 로 끝나는 것 같다.
한 PHP 페이지 안에 꼭 session_destroy();가 들어갈 필요는 없는 것 같다.
세션이 닫히는것과 없어지는 것에 대한 궁금증 생겨서 이런저런 실험을 해보았다.

cat ./set1.php
<?
session_id('chat');
session_start();
$_SESSION['test'] = "HEHEHE THIS IS TEST!";
print_r($_SESSION['test']);
var_dump($_SESSION);
//echo($_SESSION['test']);
echo("<br>set1 : ". $_SESSION['test']."<br>");
//session_destroy();
?>

cat ./set6.php
<?
require('set1.php');
$_SESSION = array();
echo("<br>set6 : ".  $_SESSION['test'] . "<br>")
?>

cat ./set7.php
<?
require('set6.php');
var_dump($_SESSION['test']);
echo("<br>set7 : " . $_SESSION['test'] ."<br>");
?>

위 상태에서 set7.php 사이트에 들어가면(물론 set1.php, set6.php, set7.php는 같은 폴더안에 있다)

HEHEHE THIS IS TEST!array(1) { ["test"]=> string(20) "HEHEHE THIS IS TEST!" }
set1 : HEHEHE THIS IS TEST!

Notice: Undefined index: test in /opt/lampp/htdocs/set6.php on line 4

set6 :

Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 3
NULL
Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 4

set7 :

라고 나온다.
즉 set1부분에서는 세션이 시작되고 test라는 이름의 세션을 추가한뒤 set6.php부분에서는 세션변수에 대해 배열 초기화가 일어나 test라는 이름의 세션이 사라져서 아무것도 없게 되는 것 같다.

그리고 session_id 라는 놈을 이용해 세션을 공유할수도 있는 것 같다. 세션을 저장하는 위치도 지정할수 있는 함수가 있었지만 직접 실험해보지는 않았다.

세션 아직은 많이 어렵다 ㅠㅠ

설정

트랙백

댓글