我有这个课:
class stringlist {
public:
typedef std::string str;
void push(str);
void pop();
void print();
void resize(size_t);
size_t capacity();
size_t size();
stringlist() : N(15) {}
stringlist(size_t sz) : N(sz) {}
private:
size_t N;
str* container = new str[N];
};
以下是测试该类的测试程序:
stringlist slist(16);
slist.push("One");
slist.push("Two");
slist.push("Three");
std::cout << "Capacity: " << slist.capacity() << std::endl;
std::cout << "List size: " << slist.size() << std::endl;
slist.print();
我不确定何时以及如何删除动态托管内存。我需要调用析构函数
~stringlist() { delete [] container; }
吗?由于new
用于创建数据成员,因此我不确定是否允许删除该成员。 最佳答案
在C ++中有一个经验法则:
对于每个new
,一个delete
。
您的代码也不例外。您已经new
了一些东西;您必须delete
它。
由于container
是在new
的构造函数中stringlist
进行的,因此您应该在delete
的析构函数中将其设置为stringlist
。
您不会直接调用析构函数。1相反,您只允许在对象的常规释放中调用析构函数,无论是通过delete
还是通过自动(即“堆栈”)销毁。
1您不直接调用析构函数。:通常。使用placement- new
时是一个例外,您在这里没有这样做。如果您不知道是否需要使用placement- new
,则不需要。