Если для доступа к куче использовать атрибут указателя для класса, как избежать ошибки нескалярного типа? - PullRequest
0 голосов
/ 20 января 2019

Это заголовок для рассматриваемого класса.Идея состоит в том, чтобы иметь класс, который действует как указатель для доступа к куче.Пока что у меня есть это.

#ifndef PTR_H_
#define PTR_H_

template < typename T >
class ptr
{
private:
    T * p;
public:
    ptr< T >()
        : p(new T)
    {

    }
    ptr< T >(ptr & pt)
        : p(pt.p)
    {

    }
    ~ptr()
    {
        delete [] p;
    }
};



#endif

Для простоты я держал их всех встроенными, но все сказано и сделано, я врезаюсь в стену.Я пытаюсь получить доступ к куче сразу, и у меня уже возникает проблема нескалярного типа.

Вот главное.

#include <iostream>
#include "ptr.h"

int main()
{
    ptr< int > p = new int;

    return 0;
}

Мой вопрос довольно прост, так как я все еще новичок в C ++ ООП, что именно я сделал не так и какие рекомендации мне нужно знать, чтобы избежать этой проблемы?

1 Ответ

0 голосов
/ 20 января 2019

Ваша ошибка "неверное преобразование * int в нескалярный тип 'ptr '" вызвана вашим объявлением ptr<int> p = new int.ptr<int> p уже достаточно.Если вы не делаете этого для изучения, вы должны вместо этого использовать std::unique_ptr и std::shared_ptr.

Если вы хотите сделать возможным объявление, вам нужно будет создать собственный конструктор, подобный этому ptr<T>(T* t) : p(t) { }.

...