Chromium Code Reviews| Index: base/callback_internal.h |
| diff --git a/base/callback_internal.h b/base/callback_internal.h |
| index 81c87c0aa749759d9dd987aa16fb0fd3c4e9bdef..93c4494cbc2c50b727e1f6763c7353b05c0e2e67 100644 |
| --- a/base/callback_internal.h |
| +++ b/base/callback_internal.h |
| @@ -29,29 +29,6 @@ class BindStateBase : public RefCountedThreadSafe<BindStateBase> { |
| virtual ~BindStateBase() {} |
| }; |
| -// This structure exists purely to pass the returned |bind_state_| from |
| -// Bind() to Callback while avoiding an extra AddRef/Release() pair. |
| -// |
| -// To do this, the constructor of Callback<> must take a const-ref. The |
| -// reference must be to a const object otherwise the compiler will emit a |
| -// warning about taking a reference to a temporary. |
| -// |
| -// Unfortunately, this means that the internal |bind_state_| field must |
| -// be made mutable. |
| -template <typename T> |
| -struct BindStateHolder { |
| - explicit BindStateHolder(T* bind_state) |
| - : bind_state_(bind_state) { |
| - } |
| - |
| - mutable scoped_refptr<BindStateBase> bind_state_; |
| -}; |
| - |
| -template <typename T> |
| -BindStateHolder<T> MakeBindStateHolder(T* o) { |
| - return BindStateHolder<T>(o); |
| -} |
| - |
| // Holds the Callback methods that don't require specialization to reduce |
| // template bloat. |
| class BASE_EXPORT CallbackBase { |
| @@ -72,8 +49,11 @@ class BASE_EXPORT CallbackBase { |
| // Returns true if this callback equals |other|. |other| may be null. |
| bool Equals(const CallbackBase& other) const; |
| - CallbackBase(InvokeFuncStorage polymorphic_invoke, |
| - scoped_refptr<BindStateBase>* bind_state); |
| + // Allow initializing of |bind_state_| via the constructor to avoid default |
| + // initializtion of the scoped_refptr. We do not also initialize |
|
akalin
2011/12/02 18:54:45
ztion -> zation
awong
2011/12/06 00:21:12
Done.
|
| + // |polymorphic_invoke_| here because doing a normal assignment in the |
| + // derived Callback templates makes for much nicer compiler errors. |
| + explicit CallbackBase(BindStateBase* bind_state); |
| // Force the destructor to be instantiated inside this translation unit so |
| // that our subclasses will not get inlined versions. Avoids more template |