mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
Make TextMetrics noncopyable
This is done by declaring unimplemented private copy constructor and assignment operator. This breaks compilation in BufferView::textMetrics, which does a copy when inserting a TextMetrics object in the cache. Some C++11 wizardry I will not pretend to completely understand saves the day. See the following page for details: https://en.cppreference.com/w/cpp/container/map/emplace This avoids real world bugs like #11512.
This commit is contained in:
parent
569841f292
commit
63bfaa14be
@ -2542,8 +2542,9 @@ TextMetrics & BufferView::textMetrics(Text const * t)
|
||||
LBUFERR(t);
|
||||
TextMetricsCache::iterator tmc_it = d->text_metrics_.find(t);
|
||||
if (tmc_it == d->text_metrics_.end()) {
|
||||
tmc_it = d->text_metrics_.insert(
|
||||
make_pair(t, TextMetrics(this, const_cast<Text *>(t)))).first;
|
||||
tmc_it = d->text_metrics_.emplace(std::piecewise_construct,
|
||||
std::forward_as_tuple(t),
|
||||
std::forward_as_tuple(this, const_cast<Text *>(t))).first;
|
||||
}
|
||||
return tmc_it->second;
|
||||
}
|
||||
|
@ -33,6 +33,9 @@ class Text;
|
||||
/// A map from a Text to the map of paragraphs metrics
|
||||
class TextMetrics
|
||||
{
|
||||
/// noncopyable
|
||||
TextMetrics(TextMetrics const &);
|
||||
void operator=(TextMetrics const &);
|
||||
public:
|
||||
/// Default constructor (only here for STL containers).
|
||||
TextMetrics() : bv_(0), text_(0), max_width_(0) {}
|
||||
|
Loading…
Reference in New Issue
Block a user