这取决于。std::vector
并且它们std::string
都有MyClass
一个共同点——如果你将一个变量声明为这些类型中的任何一种,那么它将在堆栈上分配,对于你所在的当前块是本地的,并在该块结束时被破坏。
例如
{
std::vector<std::string> a;
std::string b;
MyClass c;
} //at this point, first c will be destroyed, then b, then all strings in a, then a.
如果你得到指针,你猜对了:只有指针本身占用的内存(通常是 4 字节整数)会在离开作用域时自动释放。除非您明确指出指向的内存delete
(无论它是否在向量中),否则指向的内存不会发生任何事情。如果您有一个包含指向其他对象的指针的类,您可能必须在析构函数中删除它们(取决于该类是否拥有这些对象)。请注意,在 C++11 中有指针类(称为智能指针),可以让您以与“普通”对象类似的方式处理指针:
前任:
{
std::unique_ptr<std::string> a = make_unique<std::string>("Hello World");
function_that_wants_string_ptr(a.get());
} //here a will call delete on it's internal string ptr and then be destroyed