shared_ptr奇怪的行为

时间:2018-09-08 21:54:07

标签: c++ smart-pointers

这是我正在做的第一个问题。 我已经搜索了很多,但是找不到答案。 我正在学习在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;

1 个答案:

答案 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()