我有一个char*
数组new
'并在函数中初始化。通常我会使用std::string
,但是数组以null终止,可能有多个'\0'
,我想捕获完整大小。
实际上,来电者在使用此功能时必须记得delete[]
char *
。我想清理界面,以便在析构函数超出范围时在析构函数中调用delete[]
,但我不确定要使用什么。是否有智能指针而不是char *
?
编辑:
我宁愿不使用std::string
,因为不清楚这不是C风格的空终止字符串。我可以使用boost::scoped_array<char>
吗?由于scoped_array
是不可复制的,我如何从创建它的函数返回它?
答案 0 :(得分:1)
这就是OO编程的全部意义所在。像上面的注释一样使用std::string
,或者创建一个为您处理数据的类:
class MyObj {
private:
char *data;
int len;
public:
MyObj( const char *data, int len ) {
this->data = new char[...
// do what you need here
}
const char* getStr() const {
return data;
}
int getLen() const {
return len;
}
~MyObj() {
delete [] data;
}
};
您可能还想实现复制构造函数和赋值运算符(或私有化它们的使用)......
或者,使用std :: string作为基础实现,但只显示您想要的内容和方式:
class MyObj : private std::string {
public:
// whatever you want here
const char* data() {
return c_str();
}
int length() const {
return std::string::length();
}
};
答案 1 :(得分:0)
2011年之前,您从函数返回动态数组的选择是std::string
,std::vector<char>
或boost::shared_array<char>
。使用现代实现,您还可以使用std::unique_ptr<char[]>
。
我建议使用std::string
来表示字符串。