На самом деле работает Pimpl Idiom, используя std :: inistine_ptr?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 На самом деле работает Pimpl Idiom, используя std :: inistine_ptr?

Сообщение Anonymous »

Я пытался реализовать идиому Pimpl, используя уникальный_ptr < /code>.
Я вдохновил себя на несколько статей, которые всегда выделяют тот же важный момент: только объявляйте деструктор в заголовке класса, реализующего Pimpl, а затем определяет его в файле .cpp. В противном случае вы получите ошибку компиляции, такую ​​как «неполный тип Bla Bla». Код чуть ниже, он очень короткий.

Код: Выделить всё

#pragma once
#include 

class A
{
public:
A();
~A();
private:
class B;
std::unique_ptr m_b = nullptr;
};
< /code>
a.cpp:
#include "A.hpp"

class A::B
{

};

A::A()
{

}

A::~A() // could be also '= default'
{

}
< /code>
main.cpp:
#include "A.hpp"

int main()
{
A a1;

return 0;
}
< /code>
Я встроил 2 (быстрые и грязные) способы, и результат очень удивителен с моей точки зрения.g++ -c A.cpp
< /code>
Нет ошибки до сих пор. < /p>
Затем я собрал a.cpp и main.cpp для создания исполняемого: < /p>
g++ A.cpp main.cpp -o test
< /code>
Вот где я увлекаюсь неприятностями. Здесь я получил знаменитую ошибку о неполном типе: < /p>
In file included from /usr/include/c++/9/memory:80,
from A.hpp:2,
from test.cpp:2:
/usr/include/c++/9/bits/unique_ptr.h: In instantiation of ‘void std::default_delete::operator()(_Tp*) const [with _Tp = A::B]’:
/usr/include/c++/9/bits/unique_ptr.h:292:17:   required from ‘std::unique_ptr::~unique_ptr() [with _Tp = A::B; _Dp = std::default_delete]’
A.hpp:11:28:   required from here
/usr/include/c++/9/bits/unique_ptr.h:79:16: error: invalid application of ‘sizeof’ to incomplete type ‘A::B’
79 |  static_assert(sizeof(_Tp)>0,
|                ^~~~~~~~~~~

Я знаю, каковы ограничения, когда вы намереваетесь использовать unique_ptr в качестве части идиомы Pimpl, и я попытался заботиться о них. Однако в этом случае я должен признать, что у меня нет идеи (и волосы, как это приводит меня к нервам).
Я делаю что -то не так, или мы просто не подвергаются CENS, чтобы использовать unique_ptr в таком случае?
>

Подробнее здесь: https://stackoverflow.com/questions/713 ... unique-ptr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»