C++11 如何初始化常量字符*?如何检查它是否存在?

C++11 如何初始化常量字符*?如何检查它是否存在?,c++11,C++11,我想初始化一个常量字符。它将是一个单词数组 const char **somechar; //Is there any way to initialize here? // value = somevalue; somechar = new const char *[somevalue]; //After the use, How do I check if the array exists or not? (before deleting) delete [] somechar;

我想初始化一个常量字符。它将是一个单词数组

const char **somechar;

//Is there any way to initialize here? //

value = somevalue;

somechar = new const char *[somevalue];

//After the use, How do I check if the array exists or not? (before deleting)

delete [] somechar;
如何初始化常量字符*

使用默认值、值、副本或列表初始化中的任何一种。但是,请注意,默认情况下初始化指针时会留下一个不确定的值,因此除了与null进行比较和分配新值之外,它对任何事情都没有用处

此默认值初始化类型为
const char**
somechar

这具有未定义的行为,因为
somevalue
是默认初始化的,因此具有不确定的值。访问一个不确定的值有错误

此副本分配
const char**somechar
并默认初始化
const char*
指针数组


使用后,如何检查数组是否存在?(删去之前)

您只能检查指针是否为空,或者两个指针是否指向同一对象,或者如果指针指向同一数组,则可以比较它们的相关顺序和距离

如果指针为null,则它不会指向任何对象。如果指针不为空,则它要么指向存在的对象(指针未被删除),要么指向已销毁但不存在的对象(指针已被删除,即指针悬空)

无法检查非空指针是否指向现有对象或它是否处于悬空状态。您必须对程序进行结构化,以便不必进行此类检查。实现这一点的最简单和常用方法是将数组包装在RAII容器中,如下所示:

std::vector<std::string> somechar;
std::vector somechar;

初始化并检查是否存在
nullptr
?或者只使用
std::vector
value = somevalue;
somechar = new const char *[somevalue];
std::vector<std::string> somechar;