Vâng, p
không trỏ đến chuỗi 0 chấm dứt nếu get_string()
trả về NULL; đó là vấn đề ở đây, vì các nhà xây dựng std::string
đưa con trỏ tới chuỗi 0 chấm dứt C không thể xử lý NULL, mà càng nhiều chuỗi C chấm dứt 0 là hai chục chuối.
Vì vậy, nếu get_string()
là chức năng của riêng bạn, thay vì chức năng thư viện, thì có thể bạn nên đảm bảo rằng nó không thể trả về NULL. Ví dụ, bạn có thể để cho nó trả lại chính số std::string
được tìm kiếm, vì nó biết trạng thái của chính nó. Nếu không, tôi muốn làm điều này, sử dụng Cleanup
từ this answer như một helper để đảm bảo rằng p
không thể bị rò rỉ (theo đề nghị của Martin York trong một chú thích):
string foo()
{
const char* p = get_string();
const Cleanup cleanup(p);
const std::string str(p != NULL ? p : "");
return str;
}
Nguồn
2008-10-29 13:50:27
có, ngoại trừ việc chúng tôi không thường sử dụng Boost, nhưng tôi có thể tạo ra một lớp như vậy bản thân mình. Cảm ơn –
Đó là ví dụ về SWEET. – Allbite