C++ベースのLightweightなHTTPサーバー
| Revision | 24799dfb90671b1757c0ca809347fea5babcb8c4 (tree) |
|---|---|
| Time | 2013-01-20 21:45:09 |
| Author | Michio Hirai <smg_ykz@user...> |
| Commiter | Michio Hirai |
[BugFix] Fix the problem that mt::AutoPtr doesn't properly release resources in template
| @@ -95,7 +95,7 @@ TEST(CmVectorSocketTest, ownership_move_from_socket_via_auto_ptr) | ||
| 95 | 95 | { |
| 96 | 96 | mt::AutoPtr<cm::SocketIf> original_socket(new cm::Socket(STDOUT_FILENO)); |
| 97 | 97 | |
| 98 | - mt::AutoPtr<cm::VectorSocket> vec_sock(original_socket); | |
| 98 | + mt::AutoPtr<cm::VectorSocket> vec_sock(new cm::VectorSocket(*original_socket)); | |
| 99 | 99 | |
| 100 | 100 | const cm::IOVectorBase& iov = cm::IOVec()(string1, sizeof(string1) - 1) |
| 101 | 101 | (string2, sizeof(string2) - 1) |
| @@ -104,14 +104,10 @@ TEST(CmVectorSocketTest, ownership_move_from_socket_via_auto_ptr) | ||
| 104 | 104 | size_t bytes_written = 0u; |
| 105 | 105 | vec_sock->writev(bytes_written, iov); |
| 106 | 106 | |
| 107 | - mt::AutoPtr<cm::Socket> renewed_socket(vec_sock); | |
| 107 | + mt::AutoPtr<cm::Socket> renewed_socket(new cm::Socket(*vec_sock)); | |
| 108 | 108 | |
| 109 | 109 | std::cout << std::endl; |
| 110 | 110 | renewed_socket->write(bytes_written, "hello world(2)!!!", sizeof("hello world(2)!!!") - 1); |
| 111 | - | |
| 112 | - vec_sock = renewed_socket; | |
| 113 | - | |
| 114 | - vec_sock->writev(bytes_written, iov); | |
| 115 | 111 | } |
| 116 | 112 | |
| 117 | 113 | } // namespace |
| @@ -33,11 +33,6 @@ public: | ||
| 33 | 33 | : raw_ptr_(rhs.release()) |
| 34 | 34 | {} |
| 35 | 35 | |
| 36 | - template <typename X> | |
| 37 | - AutoPtr(AutoPtr<X>& rhs) | |
| 38 | - : raw_ptr_(rhs.get() ? new T(*(rhs.release())) : 0) | |
| 39 | - {} | |
| 40 | - | |
| 41 | 36 | AutoPtr(AutoPtrRef<T> ref) |
| 42 | 37 | : raw_ptr_(ref.raw_ptr_) |
| 43 | 38 | {} |
| @@ -101,14 +96,6 @@ public: | ||
| 101 | 96 | return *this; |
| 102 | 97 | } |
| 103 | 98 | |
| 104 | - template <typename X> | |
| 105 | - AutoPtr& operator=(AutoPtr<X>& rhs) | |
| 106 | - { | |
| 107 | - X* ptr = rhs.get(); | |
| 108 | - raw_ptr_ = ptr ? new T(*ptr) : 0; | |
| 109 | - return *this; | |
| 110 | - } | |
| 111 | - | |
| 112 | 99 | T* operator->() |
| 113 | 100 | { |
| 114 | 101 | return raw_ptr_; |