好的,我有一个类Vector:
#include <cstdlib>
class Vec
{
private:
size_t size;
int * ptab;
public:
Vec(size_t n);
~Vec() {delete [] ptab;}
size_t size() const {return size;}
int & operator[](int n) {return ptab[n];}
int operator[](int n) const {return ptab[n];}
void operator=(Vec const& v);
};
inline Vec::Vec(size_t n) : size(n), ptab(new int[n])
{ }
问题是在我的一个作业练习中我必须扩展构造函数def,所以所有元素都将用零初始化。我以为我知道基础知识,但无法通过这个动态数组-.-
PS。 sry语法和其他错误;)
答案 0 :(得分:10)
在 new-expression 中,您可以使用一对括号作为 value-initialize 的初始化程序(对于int
数组进行零初始化每个元素)一个对象。
new int[n]()
其他要点:
当您的用户定义的析构函数释放动态分配的数组时,您需要一个用户定义的复制构造函数,以确保您的类易于安全使用。
您的副本分配运算符的返回类型应为Vec&
,而不是void
,并返回*this
以符合常规约定并使用标准容器模板。
您应该考虑声明单个参数构造函数explicit
,除非您确实要启用从size_t
到Vec
的隐式转换。