为什么std::unique_ptr的声明对抽象类有效



例如:

// Example program
#include <iostream>
#include <string>
class abstract_class
{
public:
abstract_class() = default;
~abstract_class() = default;
virtual void read() = 0;
};
int main()
{
std::unique_ptr<abstract_class> x;
std::cout << "Hello, " << "!n";
}

我认为抽象类具有以下限制
抽象类不能用于:
变量或成员数据
参数类型&lt---------
函数返回类型
显式转换类型

在上面的代码中,我们使用抽象类作为模板参数,那么为什么这不是一个错误呢。

首先,您在问题中提到的参数类型适用于函数调用参数,而不是模板参数


为什么这不是一个错误。

因为您正在创建一个指向抽象类对象的唯一指针,而不是抽象类本身的对象。也就是说,允许创建指向抽象类类型的指针(无论是否唯一(

例如,只需认为您也可以在没有任何错误的情况下编写以下内容:

abstract_class *ptr; //this also works for the same reason 

相关内容

最新更新