C++指针在使用之前要延迟

C++ pointer to be deferenced before using it

本文关键字:延迟 指针 C++      更新时间:2023-10-16

假设我在类中定义了一个变量

const char* info;

bool machine::ping(){
     if(info[0] == '' ){
        printf("%s", "null");
     }
     else{
        printf("%s",info); <---------- This does NOT print out what I expect. :(
     }
}
bool machine::RecvNotify(const Data& aData){
     info = aData.path();
     printf("%s",info);  <------- This works well and prints out what I expect
}

我想我不能这样定义这个变量。如果有什么需要我改变的,请告诉我。感谢

变量很好,但aData.path可能只返回一个临时字符串,具体取决于实现。

如果将const char* info更改为std::string,会发生什么情况?

有两件事。

首先,"machine::RecvNotify()"应该在"machine:()"之前调用。这是为了给"信息"一个指向的地址。

其次,在"machine::RecvNotify()"中,当您调用"machine:()"时,是仍在作用域中的"aData"。如果没有,当您调用"machine::ping()"时,"info"将有一个无效的地址指向。这可能导致了您的"意外输出"。

如果您希望能够拥有"aData.path()"的值,即使它不再在作用域中,也可以复制它的值。按照建议,您可以将值复制到std::string成员变量中。