C++ - 确定 const char* 是指向字符串文本对象还是动态对象
C++ - Determine if const char* points to string literal or dynamic object
void delete_str(const char* theString) {
// if (theString is pointing to dynamic objects delete it)
delete[] theString;
// else do nothing
}
int main() {
char str[4] = {'a', 'b', 'c', ' '};
const char* str0 = "abc"; // assign "abc" to str0
char* str1 = new char[strlen("abc")+1]; for (int i = 0; i < 4; i++) str1[i] = str[i]; // assign "abc" to str1
delete_str(str0); // run time error
delete_str(str1); // ok
}
在此示例中,我想定义一个函数delete_str()
以删除theString
指向的内容。但是我如何确定它是否指向字符串文字?
你无法确定。程序员需要手动跟踪指针指向的对象是如何创建的。
这就是为什么不应该直接使用从new
创建的原始指针的原因之一,除非在专门管理单个此类分配的类的实现中。
使用std::string
.可以使用std::string
的.c_str()
或.data()
成员函数从 获取以 null 结尾的 C 字符串。
仅将原始指针用作非拥有指针。然后,您将永远不必决定是否需要delete
它。除了std::string
类之外,还有智能指针(如std::unique_ptr
(和容器(如std::vector
(,所有这些都将自动为您处理非数组和数组对象的所有权和正确delete
。
相关文章:
- 如何从文本文件C++制作对象?
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 使用空格分隔符从文本文件将对象读入数组
- 为什么使用 C++ 中的类对象写入文件中的数据以非文本格式存储?
- 从文本文件中读取对象
- 如果给定了文本样式,如何获取特定文本的 QSize 对象
- 有没有办法基于文本文件动态创建对象?
- 如何设计对象以不同方式设置文本格式
- 为什么<string>字符串对象需要 #include 而不是字符串文本?
- 尝试从文本文件读取到对象数组
- 对由文本实例化的对象的类引用
- 无法将对象的值写入文本文件 C++
- 在基于文本的游戏中,如何将对象放置在房间内?
- 如何在文本文件中逐行读取并填充指向对象数组的指针
- 我想从文本文件中获取信息并将该信息分配给类对象
- OpenCV程序的输出在未检测到文本对象时不给出0
- 设计具有变体字段的文本类型类,其中可以存储一个或三个对象
- 如何解析文本文件并使用构造函数中的文件输入来创建对象的容器
- C++ 确定类是否可以使用对象 - 文本 RPG 游戏