这是我正在做的第一个问题。 我已经搜索了很多,但是找不到答案。 我正在学习在c ++ 14上使用智能指针,并且编译器为g ++ 5.4。 我想知道为什么在重新分配shared_ptr应该销毁该对象时,变量“ t”仍会打印一个值。就像第二个例子一样。 预先感谢!
shared_ptr<string> p = make_shared<string>("test1");
string& t = *p.get();
cout<<t<<endl;
p = make_shared<string>("test2");
cout<<t<<endl;
cout<<"Second Example\n";
string *p1 = new string("test1");
string& t1 = *p1;
cout<<t1<<endl;
delete p1;
cout<<t1<<endl;
答案 0 :(得分:4)
我想知道为什么在重新分配shared_ptr应该破坏该对象时,变量“ t”仍会打印一个值。
因为访问被破坏对象的行为是不确定的。可能的行为包括,但不能保证以下任何一种行为:
import cv2
import numpy as np
import sys
img = cv2.imread(sys.argv[1], 1)
print(img)
car_cascade = cv2.CascadeClassifier('cars.xml')
cars = car_cascade.detectMultiScale(img, 1.1, 1)
print(len(cars))
for (x,y,w,h) in cars:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
cv2.imshow('img1', img)
cv2.waitKey(5000)
cv2.destroyAllWindows()