링크 목록을 만들려고하지만 함수 내에 객체를 만들고 해당 주소에 포인터를 할당하는 데 문제가 있습니다. 함수가 종료됩니다. 사실입니까? 그리고 만약 그렇다면, 메인 외부의 오브젝트를 어떻게 만들 수 있습니까?main() 함수 외부에서 생성 된 객체의 주소를 반환합니다.
0
A
답변
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;
}
3
올바른 지역 변수는 기능 블록 끝에서 범위를 벗어납니다. 개체에 대한 포인터를 만들고 new으로 할당해야합니다. 그리고 목록에서 제거 할 때 개체를 삭제하는 것을 잊지 마십시오.
포인터와 관련된 번거 로움과 버그를 처리하고 싶지 않은 경우 boost::shared_ptr을 참조하십시오. 목록이 파괴 될 때 삭제를 반대하는
void f()
{
CMyObject *p = new CMyObject();
List.AddTail(p); // Or whatever call adds the opbject to the list
}
에주의 :
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
}
관련 문제
- 1. C++ : main() 외부에서 시드 생성 난수 생성기
- 2. C++ main() 함수 외부에서 클래스의 인스턴스 만들기
- 3. 방금 생성 된 객체의 호출 함수
- 4. main() 함수 안에서 #include
- 5. 외부에서 생성 된 파일에서 데이터 읽기
- 6. System.Net.IPAddress 이상한 주소를 반환합니다.
- 7. main() 외부에서 정적 멤버를 초기화해야하는 이유는 무엇입니까?
- 8. document.forms.length inside 함수는 함수의 외부에서 0을 반환합니다.
- 9. 로컬 문자열 객체의 referece를 반환합니다.
- 10. Dns.GetHostEntry가 여러 IP 주소를 반환합니다.
- 11. WPF DataGrid - 생성 된 객체의 기본값
- 12. Android : 생성 된 객체의 트랙 번호
- 13. OCaml 객체의 재귀 함수
- 14. 이름에서 함수 주소를 얻으십시오 [.debug_info ??]
- 15. CORBA 명명 서비스가 등록 된 객체의 잘못된 위치를 반환합니다.
- 16. ANT 외부에서 빌드 한 속성을 반환합니다.
- 17. 서브 클래스에 의해 생성 된 객체의 C++ 오버라이드
- 18. 플렉스에서 함수 객체의 함수 이름을 얻습니다.
- 19. 공유 객체의 함수 이름 충돌
- 20. argv []를 사용하여 main-like 함수 호출하기
- 21. C++에서 main()의 함수 호출
- 22. main() 전에 클래스/함수/사물 등록하기
- 23. KRL 클로저 외부에서 KRL에 정의 된 javascript 함수 호출
- 24. 렌더링 부분 외부에서 main/index.rhtml ... Ruby on Rails
- 25. 동적으로 생성 된 테이블에서 함수 수행
- 26. JQuery에서 생성 된 HTML에서 JQuery 함수 사용?
- 27. iframe 외부에서 자바 스크립트 함수 호출
- 28. Ninject를 사용하여 외부에서 생성 된 객체에 종속성 삽입 (사용자 정의)
- 29. 비 객체의 멤버 함수 check()
- 30. "비 객체의 멤버 함수 호출"
당신이뿐만 아니라 몇 가지 코드를 게시 할 수 있습니까? – dirkgently