Я пытался найти ответ, но не смог найти ничего полезного, чтобы понять, что происходит за кулисами.
Предполагая, что у нас есть следующее:
class Base
{
public:
virtual int request() = 0;
void* operator new(long unsigned int size) = delete;
};
class Derived final : public Base
{
public:
int request() override;
};
int Derived::request()
{
return 2;
}
На базеЯ удалил новый оператор, потому что не хочу создавать указатели.Я знаю, что это может не иметь никакого смысла, это всего лишь эксперимент.
Когда я вызываю g ++, я получаю ошибку компиляции, чтобы сказать, что новый оператор удален.Именно то, что я ожидал.
int main()
{
auto d = std::make_unique<Derived>();
int value = d->request();
std::cout << "Request value is " << value << "." << std::endl;
return 0;
}
Но если я создаю shared_ptr, код компилируется и работает нормально.
auto d = std::make_shared<Derived>();
Почему этот код действителен при создании общих указателей.Оператор в этом случае не используется?