2011-08-29 7 views
-1

다음 코드를 감안할 때 :함수에 대한 참조를 전달하는 가장 좋은 방법은 무엇입니까?

[example.h]

class MyClass 
{ 
public: 
    MyClass(); 
    std::string name; 
    std::string address; 
    bool method (MyClass &object); 
}; 

[example.cpp] 

MyClass::MyClass() 
{ 
} 
bool MyClass::method (MyClass &object) { 
    try { 
     object.name = "New Name"; 
     std::cout << "Name: " << object.name << " " << object.address << std::endl; 
     return true; 
    } 
    catch (...) { 
     return false; 
    } 
} 

[Test.cpp에 이상 mainmyC.method라고 한 I 방식의 차이는 무엇

#include "example.h" 

int main() 
{ 
    MyClass myC; 

    myC.address = "address"; 
    bool quest = myC.method(myC); 
} 

, 그렇게하는 다른 방법 :

MyClass *myC = new MyClass(); 
bool quest = myC.method(*myC); 

더 나은 이유는 무엇입니까?

+3

을 : 사과 또는 망치를? – ereOn

+1

분명히 망치 :-) –

+0

'MyClass :: method'가'MyClass & object'를 취할 필요가 없다는 것에 주목하고 싶을지도 모릅니다. - myC.method()로 호출하면, 이미 액세스 할 수 있습니다 'this' 포인터를 사용하는'method'의'myC '. –

답변

1

두 경우 모두 동일한 값을 보낼 수 있지만 포인터를 참조 해제하지 않고 현재 코드를 그대로 사용하는 것이 더 우수합니다 (new). 작업을 마친 후에는 delete을 처리해야합니다. 여기서는 필요 없다고 생각합니다.

그리고 함수에서 MyClass &object const을 사용하면 전달 된 참조가 변경되지 않는 것이 좋습니다.

+0

당신의 대답을 많이 thx !! :) 나는 다음 예제가 있다면 당신에게 물어보고 싶습니다. MyClass * c = new MyClass; try {// code} catch (int i) {} 어디에 delete를 넣어야합니까? 시도 중이거나 후에 캐치? THX @ – sunset

+1

@sunset 별도 질문으로 – razlebe

0

오브젝트를 오래 호출해야하는 경우 새 오브젝트 (동적 메모리 할당)를 사용하는 것이 좋습니다. 알려진 지속 시간 인 경우 MyClass myC; 로컬 범위 버전이 가장 좋습니다 읽기 및 유지 관리가 더 간단하기 때문에).

new을 사용하는 경우 delete에 전화 할 때까지 개체 "myC"가 삭제되지 않습니다.

그러나이 범위를 벗어나면 당신은 그냥 삭제 얻을 것이다 로컬 객체로 정의하는 경우 : 더

{ 
MyClass myC; 
myC.DoSomeStuff(); 
} // It'll be destroyed here 
관련 문제