Implement MakeReferenceCounted<> helper.

pull/13357/head
Mark D. Roth 8 years ago
parent cf9ca843eb
commit 835537fbc7
  1. 9
      src/core/lib/support/reference_counted_ptr.h
  2. 25
      test/core/support/reference_counted_ptr_test.cc

@ -19,6 +19,10 @@
#ifndef GRPC_CORE_LIB_SUPPORT_REFERENCE_COUNTED_PTR_H
#define GRPC_CORE_LIB_SUPPORT_REFERENCE_COUNTED_PTR_H
#include <utility>
#include "src/core/lib/support/memory.h"
namespace grpc_core {
// A smart pointer class for objects that provide Ref() and Unref() methods,
@ -76,6 +80,11 @@ class ReferenceCountedPtr {
T* value_ = nullptr;
};
template<typename T, typename... Args>
inline ReferenceCountedPtr<T> MakeReferenceCounted(Args&&... args) {
return ReferenceCountedPtr<T>(New<T>(std::forward<Args>(args)...));
}
} // namespace grpc_core
#endif // GRPC_CORE_LIB_SUPPORT_REFERENCE_COUNTED_PTR_H

@ -31,11 +31,14 @@ namespace testing {
class Foo : public ReferenceCounted {
public:
Foo() : ReferenceCounted(nullptr) {}
Foo() : ReferenceCounted(nullptr), value_(0) {}
void log() {
gpr_log(GPR_INFO, "==> log()");
}
explicit Foo(int value) : ReferenceCounted(nullptr), value_(value) {}
int value() const { return value_; }
private:
int value_;
};
TEST(ReferenceCountedPtr, DefaultConstructor) {
@ -120,9 +123,19 @@ TEST(ReferenceCountedPtr, ResetFromNullToNull) {
TEST(ReferenceCountedPtr, DerefernceOperators) {
ReferenceCountedPtr<Foo> foo(New<Foo>());
foo->log();
foo->value();
Foo& foo_ref = *foo;
foo_ref.log();
foo_ref.value();
}
TEST(MakeReferenceCounted, NoArgs) {
ReferenceCountedPtr<Foo> foo = MakeReferenceCounted<Foo>();
EXPECT_EQ(0, foo->value());
}
TEST(MakeReferenceCounted, Args) {
ReferenceCountedPtr<Foo> foo = MakeReferenceCounted<Foo>(3);
EXPECT_EQ(3, foo->value());
}
} // namespace testing

Loading…
Cancel
Save