template <typename T>
class SharedData {
public:
- ~SharedData() {
- holder_->Release();
- }
+ ~SharedData() { holder_->Release(); }
- SharedData() : holder_(new Holder()) {
- }
+ SharedData() : holder_(new Holder()) {}
- explicit SharedData(const T& value) : holder_(new Holder(value)) {
- }
+ explicit SharedData(const T& value) : holder_(new Holder(value)) {}
SharedData(const SharedData<T>& other) : holder_(other.holder_) {
holder_->Retain();
holder_ = new Holder(value);
}
- void set_value(const T& value) {
- holder_->value = value;
- }
- T* mutable_value() {
- return &holder_->value;
- }
- const T& value() const {
- return holder_->value;
- }
+ void set_value(const T& value) { holder_->value = value; }
+ T* mutable_value() { return &holder_->value; }
+ const T& value() const { return holder_->value; }
private:
class Holder {
public:
- Holder() : value(), ref_count_(1) {
- }
- Holder(const T& value) : value(value), ref_count_(1) {
- }
+ Holder() : value(), ref_count_(1) {}
+ Holder(const T& value) : value(value), ref_count_(1) {}
void Retain() { ++ref_count_; }
- void Release() { if (--ref_count_ == 0) delete this; }
+ void Release() {
+ if (--ref_count_ == 0)
+ delete this;
+ }
T value;