如何找到处理 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_ptr
,delete
将在超出范围时为您调用。
虽然在这种特殊情况下 Song song(...);
可能更合适。
两者之间的指针有什么区别,在内存管理方面哪个更好
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_ptr
,delete
将在超出范围时为您调用。
虽然在这种特殊情况下 Song song(...);
可能更合适。