miembros Uso de datos que liberan los recursos cuando son destruidos (también conocido como RAII).
Por ejemplo:
struct TwoStrings {
std::string string1;
std::string string2;
TwoStrings(const std::string &input) : string1(input) {
if (!input[1] == ':') {
throw std::logic_error('not a Windows absolute path');
// yes, absolute paths can begin \\, this is a toy example
}
if (input.back() == '\\') {
string2 = input;
} else {
string2 = input + "\\";
}
}
};
Si el constructor lanza (ya sea logic_error
o bad_alloc
), entonces el miembro de datos inicializado ya-string1
se destruye, liberando el recurso. Para ese asunto, también se destruye string2
, pero si el constructor tira, entonces string2
todavía debe estar vacío, por lo que no tiene ningún efecto particular.
string
es un ejemplo de una clase que gestiona recursos, pero hay muchos otros. Los más flexibles de ellos se denominan "punteros inteligentes" y se pueden configurar para administrar prácticamente cualquier recurso, no solo las matrices autoasignadas de caracteres como string
.
¿Por qué está siendo tan cercano este voto? Esta es una Q válida. No cierres las Q porque no te gusta o no la entiendes. Ciérrala solo y solo si cumple con los requisitos para el cierre según la política de SO. –