방금 뭔가 방해가되었다는 것을 깨달았습니다. std::string매개 변수로 a 를 허용하는 메서드를 작성할 때마다 정의되지 않은 동작을 시작했습니다.
예를 들어,이 ...
void myMethod(const std::string& s) {
/* Do something with s. */
}
... 이렇게 부를 수 있습니다 ...
char* s = 0;
myMethod(s);
... 그리고 그것을 막기 위해 할 수있는 일은 없습니다 (내가 알고있는 것).
그래서 내 질문은 : 누군가가 어떻게 이것으로부터 스스로를 방어합니까?
유념해야 할 유일한 접근 방법은 항상 std::string다음과 같이 매개 변수로 허용하는 두 가지 버전의 메소드를 작성하는 것입니다 .
void myMethod(const std::string& s) {
/* Do something. */
}
void myMethod(char* s) {
if (s == 0) {
throw std::exception("Null passed.");
} else {
myMethod(string(s));
}
}
이것이 일반적이고 수용 가능한 해결책입니까?
편집 : 일부는 매개 변수 const std::string& s대신 수락해야한다고 지적했습니다 std::string s. 동의한다. 게시물을 수정했습니다. 그래도 대답이 바뀌지 않는다고 생각합니다.
char* s = 0정의되지 않았다는 것을 몰랐다 . 나는 내 인생에서 (보통의 형태로 char* s = NULL) 수백 번 이상 보았습니다 . 백업에 대한 참조가 있습니까?
std:string::string(char*)생성자를 의미했다
const std::string&그 매개 변수를 취할 수 없습니다 확신 합니까 ...?)
c_str속성을 확인할 수없는 이유가 있습니까?