Given:
class AlbumDataService
{
public:
explicit AlbumDataService(QSqlDatabase& database);
void init() const;
void addAlbum(Album& album) const;
void updateAlbum(const Album& album) const;
void removeAlbum(int id) const;
std::unique_ptr<std::vector<std::unique_ptr<Album>>> albums() const;
private:
QSqlDatabase& mDatabase;
};
AlbumDataService::AlbumDataService(QSqlDatabase& database) :
mDatabase(database)
{
}
I'm confused as to why the following will leave mDatabase, in the above code, null
class DatabaseManager
{
public:
static void debugQuery(const QSqlQuery& query);
static DatabaseManager& instance();
~DatabaseManager();
const AlbumDataService albumService;
protected:
DatabaseManager(const QString& path = DATABASE_FILENAME);
DatabaseManager& operator =(const DatabaseManager& rhs);
private:
std::unique_ptr<QSqlDatabase> mDatabase;
};
But not in this case:
class DatabaseManager
{
public:
static void debugQuery(const QSqlQuery& query);
static DatabaseManager& instance();
~DatabaseManager();
protected:
DatabaseManager(const QString& path = DATABASE_FILENAME);
DatabaseManager& operator =(const DatabaseManager& rhs);
private:
std::unique_ptr<QSqlDatabase> mDatabase;
public:
const AlbumDataService albumService;
};
Even though the implementation of DatabaseManager(const QString& ); doesn't change between the two
DatabaseManager::DatabaseManager(const QString& path) :
mDatabase(new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE"))),
albumService(*mDatabase)
{
mDatabase->setDatabaseName(path);
bool openStatus = mDatabase->open();
qDebug() << "Database connection: " << (openStatus ? "OK" : "Error");
albumService.init();
}