构造函数定义

时间:2011-01-01 15:27:42

标签: c++ constructor

好的,我有一个类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语法和其他错误;)

1 个答案:

答案 0 :(得分:10)

new-expression 中,您可以使用一对括号作为 value-initialize 的初始化程序(对于int数组进行零初始化每个元素)一个对象。

new int[n]()

其他要点:

  • 当您的用户定义的析构函数释放动态分配的数组时,您需要一个用户定义的复制构造函数,以确保您的类易于安全使用。

  • 您的副本分配运算符的返回类型应为Vec&,而不是void,并返回*this以符合常规约定并使用标准容器模板。

  • 您应该考虑声明单个参数构造函数explicit,除非您确实要启用从size_tVec的隐式转换。