Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中用指针和指针创建构造函数_C++_Arrays_Pointers_Constructor - Fatal编程技术网

在C++中用指针和指针创建构造函数

在C++中用指针和指针创建构造函数,c++,arrays,pointers,constructor,C++,Arrays,Pointers,Constructor,我想初始化一个文件对象,它以指针和指向指针的指针作为参数。这是正确的实施方式吗 //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

我想初始化一个文件对象,它以指针和指向指针的指针作为参数。这是正确的实施方式吗

//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];
    }
}

我应该如何实现删除两个数组的clean函数?

如果您的意思是s1和s2是新指针,您只需要编写: 1=s1和2=s2,因为字符串数据已经分配并封装在s1和s2指针包含的地址后面

如果您想克隆s1和s2内容,那么您的实现是正确的。 对于2,您需要指定s2是否是要克隆的指针指针指针。因此,解决方案可以是:

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

如果要清理第二个案例,需要先清理数组中的数组,然后再清理数组

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

我建议使用动态内存教程。这不会编译,因为两个[k]是string*类型,s1[k]是char。试着解释一下为什么你需要这个参数,也许有一个更好的解决方案,例如向量。但是,如果您想删除它,您需要在每个字符串*上调用delete,然后在字符串**上调用delete。@NikolayKondratyev您是对的。它应该是s2[]@NikolayKondratyev s1[k]是char:*s1[k]是char,但s1[k]是数组中的字符串。感谢您的帮助。在第一种情况下,我应该如何实现clean函数?写delete[]two足够了吗?是的,足够了:delete[]one;您可以使用delete[]two;因为此时,它包含已删除的指针。
for ( int k(0) ; k < i2 ; ++k )
    delete two[k];
delete two;