如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
How to resize a char array of unique pointer belonging to a class. It must be kept alive for the whole life of the program
我有一个名为container的类,其中包含std::unique_ptr_ptr。这个_ptr必须在程序的整个过程中保持活动状态。我不能失去它。当容器对象最终被销毁时。它将与它一起被摧毁。
在程序的某个部分。我需要向_ptr数组添加一个字符。为此,我使用以下功能:
void resizeUniquePtrArray(std::unique_ptr<char[]> &ptr) {
std::unique_ptr<char[]> newptr(new char[strlen(ptr.get())+2]);
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
newptr[strlen(newptr.get())]= 'X';
newptr[strlen(newptr.get()) + 1]= ' ';
ptr = std::move(newptr);
}
限制
我很确定我做错了什么。在我的项目中,有时我会丢失_ptr的内容,有时我不会。有趣的是,瓦尔格里德没有发出任何警告。
我不能用字符串代替std::unique_ptr,因为我以后必须在const_cast上使用它,这就像强奸我创建的字符串一样。
我试着使用vector并通过.data()将其分配给char*.但Valgrind疯了,给了我所有类型的读写错误
问题出在带有char*rawPointer的C库上。真的很难绕过它。我不能只使用新的字符。因为我必须带着它完成所有的程序。
问题
Char唯一指针数组_ptr的大小调整是否正确?
源代码
#include <iostream>
#include <string>
#include <memory>
#include <string.h>
class Container {
public:
Container(const std::string &data):_data(data),_ptr(new char[data.size() + 1]) {}
std::unique_ptr<char[]> & initPtr(){
strcpy(_ptr.get(),_data.c_str());
_ptr[strlen(_ptr.get()) + 1] = ' ';
return _ptr;
}
private:
std::unique_ptr<char[]> _ptr;
std::string _data;
};
void resizeUniquePtrArray(std::unique_ptr<char[]> &ptr) {
std::unique_ptr<char[]> newptr(new char[strlen(ptr.get())+2]);
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
newptr[strlen(newptr.get())]= 'X';
newptr[strlen(newptr.get()) + 1]= ' ';
ptr = std::move(newptr);
}
int main()
{
std::string name = "hello";
Container c(name);
std::unique_ptr<char[]> &ptr = c.initPtr();
resizeUniquePtrArray(ptr);
char* rawPointer = ptr.get();
std::cout<< rawPointer << std::endl;
//API LIBRARY CALL TO rawPointer it's a looonng process
return 0;
}
我不能用
std::string
代替std::unique_ptr
,因为我以后必须在const_cast
上使用,这就像强奸我创建的字符串一样。
不需要const_cast
来获得指向底层C字符串的纯指针:
std::string s("abc");
char* p = &s[0];
或者,在C++17:中
char* q = s.data();
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
- Qt应用程序状态生命周期
- 受嵌套处理程序影响的异常的生命周期
- 我应该在c++中删除指向应用程序生命周期变量的指针吗?