Tôi không quen sử dụng weak_ptr
và tôi đang đối mặt với một tình huống khá khó hiểu. Tôi đang sử dụng Intel XE 2019 Composer update 5 ( gói 2019.5.281 ) kết hợp với Visual Studio 2019 ver. 16.2.5 . Tôi biên dịch trong 64-bit. Tôi sử dụng C ++ 17 tiêu chuẩn .
Đây là mã cho giải pháp tăng đột biến của tôi:
#include <memory>
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
shared_ptr<int> sp = make_shared<int>( 42 );
cout << "*sp = " << *sp << endl;
weak_ptr<int> wp = sp;
cout << "*sp = " << *sp << ", *wp = " << *wp.lock() << endl;
wp.reset();
cout << "*sp = " << *sp << endl;
return 0;
}
Đầu ra tôi dự kiến sẽ có:
*sp = 42
*sp = 42, *wp = 42
*sp = 42
... nhưng đây là những gì tôi thu được:
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
Goin là gì? Có phải là bình thường shared_ptr
để được sửa đổi / không hợp lệ khi / một liên kết weak_ptr
được thiết lập lại? Tôi hơi bối rối về kết quả tôi đạt được. Nói thật là tôi không mong đợi kết quả này ...
CHỈNH SỬA 1
Mặc dù lỗi xảy ra trong cấu hình 64 bit , nhưng nó không xảy ra ở 32 bit . Trong cấu hình sau này, kết quả là những gì được mong đợi.
CHỈNH SỬA 2
Lỗi chỉ xảy ra trong Debug . Khi tôi xây dựng trong Bản phát hành , tôi nhận được kết quả mong đợi.
-572662307 = 0xDDDDDDDD
đó là cách chỉ ra bộ nhớ heap được giải phóng của msvc