2009-03-03 2 views

답변

0

새 연산자로 개체를 만듭니다. ie

void foo(myObject* bar1, myObject* bar2) 
{ 
    bar1 = new myObject(); 
    bar2 = new myObject(); 
    // do something 
} 

int main(int argc, char* argv[]) 
{ 
    myObject* thing1; 
    myObject* thing2; 
    foo(thing1, thing2); 

    // Don't forget to release the memory! 
    delete thing1; 
    delete thing2; 

    return 0; 
} 
+0

새로운 bar1 및 bar2 포인터가 만들어졌지만 main()에서 해당 포인터에 액세스 할 수 있습니까? – chustar

+0

bar1 및 bar2는 함수의 매개 변수입니다. 따라서 두 개의 새로운 연산으로 할당 된 메모리는 함수 두 개를 전달한 포인터에 의해 지시됩니다. foo가 호출 된 후, thing1과 thing2는 ARE bar1과 bar2이므로 똑같은 메모리를 가리 킵니다. 희망이 도움이됩니다. – cpatrick

3

올바른 지역 변수는 기능 블록 끝에서 범위를 벗어납니다. 개체에 대한 포인터를 만들고 new으로 할당해야합니다. 그리고 목록에서 제거 할 때 개체를 삭제하는 것을 잊지 마십시오.

포인터와 관련된 번거 로움과 버그를 처리하고 싶지 않은 경우 boost::shared_ptr을 참조하십시오. 목록이 파괴 될 때 삭제를 반대하는

void f() 
{ 
    CMyObject *p = new CMyObject(); 
    List.AddTail(p); // Or whatever call adds the opbject to the list 
} 

에주의 :

+0

+1 부스트 옹호 ... :) – mwigdahl

+0

그는 언어에 새로운 것 같습니다. 내 생각 엔 그가 학교 과제물에 대한 링크 된 목록을 구현하고있다 (그렇지 않으면 STL 또는 일부를 사용할 것임). 그는 아마도 제 삼자 도서관을 사용해서는 안되기 때문에 과제의 요점을 무시할 것입니다. 물론 이것은 모두 추측입니다. –

+0

@ 2-bits. 그게 사실이야. – chustar

2

는 new 연산자를 사용합니다.

0

왜 개체에 포인터가 아닌 목록에 저장하지 않습니까? 생성자 함수는 객체를 반환합니다.

정말 포인터 목록이 필요하면 특수 포인터 목록 컨테이너 (boost::ptr_list)를 사용하거나 스마트 포인터를이 포인터에 저장하는 것을 고려하십시오 (boost::shared_ptr). 함수에서 복귀 한 후에 객체가 범위를 벗어나지 않게하려면 new 연산자를 사용하여 객체를 동적으로 할당해야합니다.

0

허용되는 대답이 올바르지 않습니다. 함수에서

void foo(myObject* bar1, myObject* bar2) 
{ 
    bar1 = new myObject(); 
    bar2 = new myObject(); 
    // do something 
} 

새로 할당 된 개체는 로컬 변수에 할당됩니다. 호출 함수의 포인터 값에는 영향을주지 않습니다. 당신이 필요로하는 무엇

int main(int argc, char* argv[]) 
{ 
    myObject* thing1; 
    myObject* thing2; 
    foo(thing1, thing2); // thing1 and thing2 don't get assigned 
         // They continue to be uninitialized in 
         // this function 

    // Don't forget to release the memory! 
    delete thing1; // These two deletes will lead to undefined behavior. 
    delete thing2; 

    return 0; 
} 

은 다음과 같습니다

void foo(myObject*& bar1, myObject*& bar2) 
{ 
    bar1 = new myObject(); // Now the value of the pointers in the calling 
    bar2 = new myObject(); // will be changed since the pointers are passed by reference. 
    // do something 
} 
관련 문제