Направление требует указатель операнда. Я не понимаю, почему * Uptr работает - PullRequest
0 голосов
/ 30 сентября 2019

Я не понимаю, почему получить значение из адреса. 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;
}

1 Ответ

0 голосов
/ 30 сентября 2019

Вам нужно определить operator* для my_unique_ptr().

...