std::vector s'occupe de faire respecter (de manière transparente) le RAII sur un pointeur dont il est déjà propriétaire à la base: c'est std::vector qui se charge d'appeler new pour pouvoir y placer ses éléments
Une "capsule RAII" (comme les pointeurs intelligents" accaparent la propriété (quitte à ce qu'elle soit partagée) d'une ressource dont il ne sont pas propriétaire à la base:
Ce n'est ni std::unique_ptr ni std::shared_ptr qui appelle new, mais celui qui décide de leur confier la propriété (std::make_unique, std::make_shared, appel explicite à new de la part de l'utilisateur (de std*_ptr), factory, autres...)
On se rend compte qu'il y a donc bel et bien "une légère différence" -- et pourtant bien réelle -- entre une classe appliquant le RAII automatiquement et de manière transparente pour une de ses ressources interne et une capsule RAII : la création de la ressource fait partie de son "frichti interne", alors qu'elle est totalement extérieure à la deuxième.
Ou, dit plus simplement, on pourrait dire qu'une capsule RAII n'a comme seule raison d'être que d'assurer une fin RAII à (la "destruction propre" de) la ressource dont elle prend la responsablilité, alors que RAII en entier concerne également toutes les manières dont une classe peut acquérir les ressources dont elle est directement responsable.
Partager