impossible de supprimer std::vector & std::array?

Ma classe C++ est un destructeur qui essaie de supprimer std::vector et std::array variables d'instance.

#include <iostream>
#include <vector>
#include <array>

int main()
{
    std::array<int, 3> foo;
    std::vector< std::array<float, 4> > vertices;

    foo[0] = 1;
    foo[1] = 2;
    foo[2] = 3;
    std::cout << foo[0] << std::endl;
    delete foo;
    delete vertices;

    return 0;
}

Je ne suis pas sûr de comment libérer de la mémoire - comment ne puis-je pas supprimer ces variables?

clang++ -std=c++11 -stdlib=libc++ -Weverything ccc.cpp 
ccc.cpp:14:2: error: cannot delete expression of type 'std::array<int, 3>'
        delete foo;
        ^      ~~~
ccc.cpp:15:2: error: cannot delete expression of type 'std::vector<std::array<float, 4>
      >'
        delete vertices;
        ^      ~~~~~~~~
ccc.cpp:18:2: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic]
}
 ^
Vous n'avez pas affecter n'importe quoi avec new, pourquoi ne vous vous sentez l'envie de libérer quelque chose avec delete? Ce sont des variables automatiques - ils sont automatiquement détruits lorsqu'ils passent hors de portée.
même s'ils sont membres de l'instance des variables dans une classe?
Oui, les membres d'une classe n'ont pas caché new ci-joint.
Ils ne sont pas membres de la classe dans le code vous montrer. De toute façon, la durée de vie de la non-statique des membres de la classe correspond à celle de l'contenant de l'instance de classe.
Tout d'abord, ce qui se passe "dans une classe" n'en est pas de votre entreprise, pour le dire crûment. La classe elle-même prendra soin de tout, si la classe est bien conçu. Deuxièmement, std::array ne pas allouer de la mémoire dynamiquement "dans une classe". std::vector n', mais encore une fois, ce n'est pas à vous de vous inquiéter.

OriginalL'auteur ejang | 2013-09-22