2014-01-29 39 views
1

在下面的代碼中,臨時字符串對象在返回其內部緩衝區後被創建並銷燬。因此p指向無效的內存位置。函數調用中臨時對象的範圍

int main() 
{ 
    const char* p = std::string("testing").c_str(); 
    //p points to an invalid memory location 
} 

在下面的代碼中,創建了臨時字符串對象。臨時字符串對象何時被刪除?執行後func()?我可以安全地使用func()方法中的p指針嗎?

void func(const char* p) 
{ 
    //p is valid or invalid ???? 
} 

int main() 
{ 
    func(std::string("testing").c_str()); 
} 

回答

0

p在聲明func(std::string("testing").c_str());之後立即生效。這意味着在func返回之後,匿名臨時字符串不會從堆棧彈出。

所以你的代碼是完全安全的。