저는 C++의 문자열에 상당히 초보적이어서 다음과 같은 패턴이 약간 엉망이 될 수 있습니다. 더 큰 시스템으로 통합 테스트를 시작하기 전에 필자가 작성한 코드를 검토하고 있습니다. 내가 알고 싶은 것은 그것이 안전한지 또는 메모리 누수가 발생하기 쉬운가하는 것입니다.메모리 누수로부터 안전한 C++ std :: string 객체를 반환하고 있습니까?
string somefunc(void) {
string returnString;
returnString.assign("A string");
return returnString;
}
void anotherfunc(void) {
string myString;
myString.assign(somefunc());
// ...
return;
}
내가 가진 이해는 returnString의 값이 새 개체 mystring에 할당 된 후 returnString 객체가 somefunc에 대한 호출을 해결의 일환으로 파괴된다는 것이다. myString이 범위를 벗어나게되면 미래의 어떤 시점에서 그것도 파괴됩니다.
일반적으로 myString에 대한 포인터를 somefunc()에 전달하고 myString 값에 직접 할당했지만 코드에서 조금 더 명확 해지기 위해 노력하고 있습니다 (부작용 함수 스타일에 덜 의존).
첫 번째 함수에서 "return string ("A string ");" 같은 결과를 얻습니다. – luiscubal
@luiscubal 이것은 문제를 설명하기위한 단순화 된 예입니다. – Stephen
@luiscubal 심지어'return "std :: string은 c 문자열로 구성 가능하기 때문에"; "문자열은 괜찮습니다. – log0