Я не понимаю, почему получить значение из адреса. ex) cout << * ptr <<p> Этот проект пишет уникальную библиотеку указателей с шаблоном. в моем template.cpp я могу оценить свое значение с помощью * ptr. Но это не работает для моего main ().
template<typename T>
my_unique_ptr<T>::my_unique_ptr(T *input)
{
my_ptr = input;
std::cout<<*my_ptr<<std::endl; // a
std::cout<<&my_ptr<<std::endl; // 0x7ffee7b427e0
}
, но .. в моем main () `
int main()
{
my_unique_ptr<char> uptr{new char{'a'}};
cout<<"address of uptr: "<<&uptr<<endl; //0x7ffee7b427e0
cout<<*uptr<<endl; //error
return 0;
}
и ошибка
Indirection requires pointer operand ('my_unique_ptr<char>' invalid)
это "my_memory.cpp"
#include "my_memory.hpp"
#include <iostream>
template<typename T>
my_unique_ptr<T>::my_unique_ptr(): my_ptr(nullptr)
{//there are no valye for my_ptr since it is nullptr
std::cout<<"**** Default Con Start ****"<<std::endl;
std::cout<<"my_ptr: "<<my_ptr<<" address: "<<&my_ptr<<std::endl;
std::cout<<"--------------------------------"<<std::endl;
std::cout<<std::endl;
}
template<typename T>
my_unique_ptr<T>::~my_unique_ptr()
{
std::cout<<"**** Destructor ****"<<std::endl;
std::cout<<&my_ptr<<std::endl;
delete my_ptr;
}
template<typename T>
my_unique_ptr<T>::my_unique_ptr(T *input)
{
my_ptr = input;
// my_ptr = new char{*input};
//this->my_ptr = new
std::cout<<*my_ptr<<std::endl; //value of my_ptr
std::cout<<&my_ptr<<std::endl;
}
template<typename T>
bool my_unique_ptr<T>::isNullptr()
{
return (my_ptr==nullptr);
}
это "my_memory.hpp"
#ifndef my_memory_hpp
#define my_memory_hpp
template <typename T>
class my_unique_ptr
{
public:
bool isNullptr();
my_unique_ptr();
~my_unique_ptr();
explicit my_unique_ptr(T *input);
private:
T* my_ptr;
};
#include "my_memory.cpp"
#endif /* my_memory_hpp */
и это мой main.cpp
#include <iostream>
#include "my_memory.hpp"
using namespace std;
int main()
{
my_unique_ptr<char> uptr{new char{'a'}};
cout<<"address of uptr: "<<&uptr<<endl;
return 0;
}