Fix pure virtual function call v2 (#3996)
This commit is contained in:
@@ -16,6 +16,9 @@ VectorMLTTile::VectorMLTTile(const OverscaledTileID& id_,
|
||||
: VectorTile(id_, std::move(sourceID_), parameters_, tileset_, observer_) {}
|
||||
|
||||
VectorMLTTile::~VectorMLTTile() {
|
||||
// this needs to be explicitly deleted in the most-derived destructor
|
||||
loader.reset();
|
||||
|
||||
// Don't rely on `~TileLoader` to close, it's not safe to call there.
|
||||
// We're still calling a virtual method from a destructor, so any overrides will not be called.
|
||||
GeometryTile::cancel();
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace mbgl {
|
||||
class Tileset;
|
||||
class TileParameters;
|
||||
|
||||
class VectorMLTTile : public VectorTile {
|
||||
class VectorMLTTile final : public VectorTile {
|
||||
public:
|
||||
VectorMLTTile(const OverscaledTileID&,
|
||||
std::string sourceID,
|
||||
|
||||
@@ -16,6 +16,9 @@ VectorMVTTile::VectorMVTTile(const OverscaledTileID& id_,
|
||||
: VectorTile(id_, std::move(sourceID_), parameters_, tileset_, observer_) {}
|
||||
|
||||
VectorMVTTile::~VectorMVTTile() {
|
||||
// this needs to be explicitly deleted in the most-derived destructor
|
||||
loader.reset();
|
||||
|
||||
// Don't rely on `~TileLoader` to close, it's not safe to call there.
|
||||
// We're still calling a virtual method from a destructor, so any overrides will not be called.
|
||||
GeometryTile::cancel();
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace mbgl {
|
||||
class Tileset;
|
||||
class TileParameters;
|
||||
|
||||
class VectorMVTTile : public VectorTile {
|
||||
class VectorMVTTile final : public VectorTile {
|
||||
public:
|
||||
VectorMVTTile(const OverscaledTileID&,
|
||||
std::string sourceID,
|
||||
|
||||
@@ -13,20 +13,16 @@ VectorTile::VectorTile(const OverscaledTileID& id_,
|
||||
const Tileset& tileset,
|
||||
TileObserver* observer_)
|
||||
: GeometryTile(id_, std::move(sourceID_), parameters_, observer_),
|
||||
loader(*this, id_, parameters_, tileset) {}
|
||||
loader(std::make_unique<TileLoader<VectorTile>>(*this, id_, parameters_, tileset)) {}
|
||||
|
||||
VectorTile::~VectorTile() {
|
||||
// Don't rely on `~TileLoader` to close, it's not safe to call there.
|
||||
// We're still calling a virtual method from a destructor, so any overrides will not be called.
|
||||
GeometryTile::cancel();
|
||||
}
|
||||
VectorTile::~VectorTile() {}
|
||||
|
||||
void VectorTile::setNecessity(TileNecessity necessity) {
|
||||
loader.setNecessity(necessity);
|
||||
loader->setNecessity(necessity);
|
||||
}
|
||||
|
||||
void VectorTile::setUpdateParameters(const TileUpdateParameters& params) {
|
||||
loader.setUpdateParameters(params);
|
||||
loader->setUpdateParameters(params);
|
||||
}
|
||||
|
||||
void VectorTile::setMetadata(std::optional<Timestamp> modified_, std::optional<Timestamp> expires_) {
|
||||
|
||||
@@ -23,8 +23,10 @@ public:
|
||||
|
||||
virtual void setData(const std::shared_ptr<const std::string>&) = 0;
|
||||
|
||||
private:
|
||||
TileLoader<VectorTile> loader;
|
||||
protected:
|
||||
// this needs to be explicitly deleted in the most-derived destructor
|
||||
// see `~VectorMVTTile`
|
||||
std::unique_ptr<TileLoader<VectorTile>> loader;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
Reference in New Issue
Block a user