Creating constructor with pointer and pointer to pointer parameters in C++

时间:2015-05-24 22:01:34

标签: c++ arrays pointers constructor

I want to initialize a File object which takes a pointer and pointer to pointer as an argument. Is this the correct way of implementing it?

//file.h
class File {
    public: File(string * , int, string * * , int);
    void clean();

    private: string * one;
    int size_one; //gives size of one array
    string * * two;
    int size_two; //gives size of *two array
}

//file.cpp
File::File(string * s1, int i1, string * * s2, int i2) {
    int k;
    one = new string[i1];
    for (k = 0; k < i1; k++) {
        one[k] = s1[k];
    }

    two = new string * [i2];
    for (k = 0; k < i2; k++) {
        two[k] = s2[k];
    }
}

How should I implement the clean() function which deletes both arrays?

1 个答案:

答案 0 :(得分:0)

如果你的意思是s1和s2是“新”指针,你只需要写: one = s1和two = s2,因为字符串数据已经分配并封装在s1和s2指针所包含的地址后面。

如果要克隆s1和s2内容,则一个人的实现是正确的。 如果有两个,则需要指定s2是否是要克隆的指针的指针。所以解决方案可能是:

two = new string*[i2];
for ( int k(0) ; k < i2 ; ++k )
    two[k] = s1[k];

two = new string*[i2];
for ( int k(0) ; k < i2 ; ++k )
{
    two[k] = new string[yourDim];
    for ( int l(0) ; l < i2 ; ++l )
        two[k][l] = s2[k][l];
}

如果要清理第二种情况,则需要在数组之前清除数组数组。

for ( int k(0) ; k < i2 ; ++k )
    delete two[k];
delete two;