m*****n 发帖数: 2152 | 1 尽然发现unique_ptr可以和常规ptr share。
最后造成code crash,这算不算一个C++的问题?
int main()
{
unique_ptr up(new string("Nico"));
string *p = new string("Kid");
up.reset(p);
cout << *up << " " << *p << endl;
delete p;
return 0;
} |
p***o 发帖数: 1252 | 2 不算,文档里都说take ownership了你还delete它干啥。
【在 m*****n 的大作中提到】 : 尽然发现unique_ptr可以和常规ptr share。 : 最后造成code crash,这算不算一个C++的问题? : int main() : { : unique_ptr up(new string("Nico")); : string *p = new string("Kid"); : up.reset(p); : cout << *up << " " << *p << endl; : delete p; : return 0;
|
N******K 发帖数: 10202 | 3 裸指针并没有被禁止使用
用了智能指针 就不要再用delete 而且尽量不要用new 改为 make_new make_unique
【在 m*****n 的大作中提到】 : 尽然发现unique_ptr可以和常规ptr share。 : 最后造成code crash,这算不算一个C++的问题? : int main() : { : unique_ptr up(new string("Nico")); : string *p = new string("Kid"); : up.reset(p); : cout << *up << " " << *p << endl; : delete p; : return 0;
|
m*****n 发帖数: 2152 | 4 为什么reset(ptr),不加个引用,然后把常规ptr赋值成NULL,等于做的和release()完
全相反,不是比较make sense吗?
【在 p***o 的大作中提到】 : 不算,文档里都说take ownership了你还delete它干啥。
|
d****i 发帖数: 4809 | 5 你这个不是多此一举吗?用
string s = "Kid";
char *ptr_s = s.c_str();
string *ptr_ss = &s;
不是挺好吗?
【在 m*****n 的大作中提到】 : 尽然发现unique_ptr可以和常规ptr share。 : 最后造成code crash,这算不算一个C++的问题? : int main() : { : unique_ptr up(new string("Nico")); : string *p = new string("Kid"); : up.reset(p); : cout << *up << " " << *p << endl; : delete p; : return 0;
|
N******K 发帖数: 10202 | 6 你这还是原始社会思维
【在 m*****n 的大作中提到】 : 为什么reset(ptr),不加个引用,然后把常规ptr赋值成NULL,等于做的和release()完 : 全相反,不是比较make sense吗?
|
w*********l 发帖数: 1337 | 7 擦,明知人家要delete,你自己再delete一遍,然后说人家有问题
【在 m*****n 的大作中提到】 : 尽然发现unique_ptr可以和常规ptr share。 : 最后造成code crash,这算不算一个C++的问题? : int main() : { : unique_ptr up(new string("Nico")); : string *p = new string("Kid"); : up.reset(p); : cout << *up << " " << *p << endl; : delete p; : return 0;
|
q****x 发帖数: 7404 | 8 他就是举例吧。
【在 d****i 的大作中提到】 : 你这个不是多此一举吗?用 : string s = "Kid"; : char *ptr_s = s.c_str(); : string *ptr_ss = &s; : 不是挺好吗?
|
q****x 发帖数: 7404 | 9 +1
【在 p***o 的大作中提到】 : 不算,文档里都说take ownership了你还delete它干啥。
|
q****x 发帖数: 7404 | 10 reset的语义是reset unique_ptr,不是参数。那样会更复杂。
楼主的例子不好。这种情况下直接inline即可,没必要多一个参数。
【在 m*****n 的大作中提到】 : 为什么reset(ptr),不加个引用,然后把常规ptr赋值成NULL,等于做的和release()完 : 全相反,不是比较make sense吗?
|