So the only reason to return a pointer to the modifications is to check of they are null, why not have a method that checks if there are modifications, this would spare line 186. The code would look like:

    if (txmgr.hasModifications(ctx.tid)) {
        auto mods = txmgr.getModifications()
        // ....
    }

And `hasModifications` is defined as

    bool TransactionManager::hasModifications(const transaction_id_t key) const {
      return _txData([&key] (const map_t& txData) -> bool {
         return txData.find(key) != txData.end();
        });
    }