嵌套类指针的特殊行为

Peculiar behavior of nested class pointers?

本文关键字:指针 嵌套      更新时间:2023-10-16

我正在使用mysql-conntector++,我对指针类型的一些行为感兴趣,例如:

sql::Driver *driver__; 

sql::Connection *connection__;

显然,::Driver::Connectionsql的嵌套类,当我尝试在堆上初始化这些指针中的任何一个时:

sql::Driver *driver__ {new sql::Driver()};

错误:

error: invalid new-expression of abstract class type ‘sql::Driver’
    sql::Driver *driver__ {new sql::Driver()};

库如何使用嵌套类和指向此类类的指针实现此类行为?

我已经查看了mysql-connector++源代码,似乎无法识别相关部分。

注意:上述错误是使用 CMake 产生的,-std=c++14

库如何使用嵌套类和指向此类类的指针实现此类行为?

抽象类的具体实例仅作为基类子对象存在。实现这些的方法是继承:

struct MyDriver : sql::Driver {
    //TODO implement all pure virtual functions of sql::Driver
}
// imaginary implementation
Driver* get_driver_instance() {
    static MyDriver instance;
    return &instance;
}

附言。Driversql(命名空间?)的成员这一事实在其他方面对用户来说并不重要,除了它影响名称查找的方式。

事实上,当你声明

sql::Driver *driver__;
sql::Connection *connection__;

声明对实现以下接口的实例的引用:

  • 一个 SQL 驱动程序
  • 一个 SQL 连接

为了实例化此类实例,库以这种方式为您提供工厂

driver__ = get_driver_instance();
connection__ = driver->connect("tcp://127.0.0.1:3306", "root", "root");
实例

化后,您将仅操作此类实例的公共接口。