如何找到处理 ptr 和 -> 之间指针差异的方法

how to find the ways of handling pointer difference between ptr and ->

两者之间的指针有什么区别,在内存管理方面哪个更好

void Loo(){ 
 Song* pSong = new Song(…);
 //…
 string s = pSong->duration;
}

void Hoo(){ 
 unique_ptr<Song> song2(new Song(…));
 //…
 string s = song2->duration;
}

在第一种情况下,您需要自己调用 delete 并确保它发生在所有程序控制路径上。

说起来容易做起来难。在函数的右大括号之前写 delete pSong; 并完成它是很诱人的。但是,如果 string s = song2->duration 抛出异常,会发生什么? (是的,这是可能的;例如,如果 song2->duration 是定义了转换运算符的类型,那么它可以分配给 string。)

使用 std::unique_ptrdelete 将在超出范围时为您调用。

虽然在这种特殊情况下 Song song(...); 可能更合适。