그래서 저는 항상 C++ 포인터에 비해 약간 퍼지 려합니다. 다른 하나는 무엇이든 호출됩니다. 마찬가지로,스택 변수를 반환 하시겠습니까?
Object* pointer = new Object();
대
Object notpointer();
내가 포인터는 아마 두 번째에 참여하는 것을 알고 있지만, 기본적으로는하지 포인터입니다. (이것은 실제로 무엇이라고?)
은 또한, 나는 오른쪽 첫 번째를 들어, 당신이 그것으로 완료되면 어느 시점에서
delete pointer;
를 호출 할 필요가 있다고 생각? 그리고 다른 하나는 걱정할 필요가 없습니다. 첫 번째는 힙에 할당되지만 두 번째는 스택에 할당되고 메서드가 반환되면 사라지는 것을 읽었습니다.
그러나 함수에서 뭔가 (원시가 아닌)를 반환하면 어떨까요?
좋은 예는 Should I return std::strings?로 작성 :
내가 이전에, 문자열 스택에 할당 쓰고, 해제되어야 하는지를으로std::string linux_settings_provider::get_home_folder() {
return std::string(getenv("HOME"));
}
때 함수가 반환, 그렇지? 그러나 아무도 그것에 대해 아무 말도하지 않아, 나는 그것이 잘 작동한다고 가정합니다. 왜? 일반적으로
,
return new std::string("pointer");
및
return std::string("not-pointer");
의 차이는 무엇인가?
두 작품 모두를 가정 할 때, 두 작품의 장단점은 무엇입니까?
두 번째 기능입니다. – chris
여기에 몇 가지 개념을 혼합하고 있습니다. 포인터는 메모리 주소를 저장할 수있는 변수 일뿐입니다. 'new std :: string'은 메모리 할당과 객체 생성을 수행합니다. 이 두 가지를 함께 사용할 필요는 없습니다. 현대 C++에서는 일반적으로이 작업을 수행하지 않습니다. – greatwolf
문자열이 스택에 할당됩니다. 그것은 ** ** 해제되지 않았습니다. 파괴되었다. 그러나 컴파일러는이를 파기하기 전에 복사합니다. –