Я прочитал документацию об инициализации уникального указателя здесь . Я попытался объявить уникальный указатель таким же образом (see unique_ptr<int> temp1 {&h}
, я не видел этого типа объявления в документах, просто экспериментировал), я объявляю неумный указатель. Идея проведения этого эксперимента заключалась в том, чтобы увидеть, как работает метод std::unique_ptr::get()
. Вот код:
#include<iostream>
#include<stdio.h>
#include<memory>
using namespace std ;
int main(){
int h {100};
unique_ptr<int> temp1 {&h};
cout<<"temp1.get() :"<<temp1.get()<<endl;
cout<< "&h : "<<&h<<endl;
cout<<"*temp : "<<*temp1<<endl;
return 0 ;
}
Код компилируется, и я получаю следующий вывод:
temp1.get() :0x7ffd4322c5cc
&h : 0x7ffd4322c5cc
*temp : 100
/home/abhishek/.codelite/tmp/abhishek/codelite-exec.sh: line 3: 7889 Segmentation fault (core dumped) ${command}
Hit any key to continue...
Я вижу, что std::unique_ptr::get()
возвращает адрес управляемого объекта, который совпадает с &h
. О чем здесь говорит ошибка? Хотя назначение адреса интеллектуальному указателю обсуждалось здесь . Это не отвечает на мой вопрос.
unique_ptr
пытаетсяdelete
сделать что-то, не выделенноеnew
. - person KamilCuk   schedule 29.12.2019