Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Side by Side Diff: base/move.h

Issue 9380051: Coverity: Fix a few pass-by-values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Revert printing. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative/initializing_rules_registry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_MOVE_H_ 5 #ifndef BASE_MOVE_H_
6 #define BASE_MOVE_H_ 6 #define BASE_MOVE_H_
7 7
8 // Macro with the boilerplate that makes a type move-only in C++03. 8 // Macro with the boilerplate that makes a type move-only in C++03.
9 // 9 //
10 // USAGE 10 // USAGE
11 // 11 //
12 // This macro should be used instead of DISALLOW_COPY_AND_ASSIGN to create 12 // This macro should be used instead of DISALLOW_COPY_AND_ASSIGN to create
13 // a "move-only" type. Unlike DISALLOW_COPY_AND_ASSIGN, this macro should be 13 // a "move-only" type. Unlike DISALLOW_COPY_AND_ASSIGN, this macro should be
14 // the first line in a class declaration. 14 // the first line in a class declaration.
15 // 15 //
16 // A class using this macro must call .Pass() (or somehow be an r-value already) 16 // A class using this macro must call .Pass() (or somehow be an r-value already)
17 // before it can be: 17 // before it can be:
18 // 18 //
19 // * Passed as a function argument 19 // * Passed as a function argument
20 // * Used as the right-hand side of an assignment 20 // * Used as the right-hand side of an assignment
21 // * Return from a function 21 // * Returned from a function
22 // 22 //
23 // Each class will still need to define their own "move constructor" and "move 23 // Each class will still need to define their own "move constructor" and "move
24 // operator=" to make this useful. Here's an example of the macro, the move 24 // operator=" to make this useful. Here's an example of the macro, the move
25 // constructor, and the move operator= from the scoped_ptr class: 25 // constructor, and the move operator= from the scoped_ptr class:
26 // 26 //
27 // template <typename T> 27 // template <typename T>
28 // class scoped_ptr { 28 // class scoped_ptr {
29 // MOVE_ONLY_TYPE_FOR_CPP_03(scoped_ptr, RValue) 29 // MOVE_ONLY_TYPE_FOR_CPP_03(scoped_ptr, RValue)
30 // public: 30 // public:
31 // scoped_ptr(RValue& other) : ptr_(other.release()) { } 31 // scoped_ptr(RValue& other) : ptr_(other.release()) { }
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 // 115 //
116 // 1) All its methods are declared, but intentionally not defined. 116 // 1) All its methods are declared, but intentionally not defined.
117 // 2) It is *never* instantiated. 117 // 2) It is *never* instantiated.
118 // 3) It is a child of the move-only type. 118 // 3) It is a child of the move-only type.
119 // 119 //
120 // (1) is a guard against accidental violation of (2). If an instance of 120 // (1) is a guard against accidental violation of (2). If an instance of
121 // RValue were ever created, either as a temporary, or as a copy to some 121 // RValue were ever created, either as a temporary, or as a copy to some
122 // function parameter or field of a class, the binary will not link. 122 // function parameter or field of a class, the binary will not link.
123 // 123 //
124 // This ensures that RValue can only exist as a temporary which is important 124 // This ensures that RValue can only exist as a temporary which is important
125 // to avoid accidental danging references. 125 // to avoid accidental dangling references.
126 // 126 //
127 // (3) allows us to get around instantiations because our user-defined 127 // (3) allows us to get around instantiations because our user-defined
128 // conversion can return a downcast of this pointer. 128 // conversion can return a downcast of this pointer.
129 // 129 //
130 // operator RValue&() { return *reinterpret_cast<RValue*>(this); } 130 // operator RValue&() { return *reinterpret_cast<RValue*>(this); }
131 // 131 //
132 // Because RValue does not extend the object size or add any virtual methods, 132 // Because RValue does not extend the object size or add any virtual methods,
133 // this type-pun is safe. 133 // this type-pun is safe.
134 // 134 //
135 // An alternative implementation would be to make RValue into a concrete 135 // An alternative implementation would be to make RValue into a concrete
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 void operator=(const rvalue_type&); \ 202 void operator=(const rvalue_type&); \
203 }; \ 203 }; \
204 type(type&); \ 204 type(type&); \
205 void operator=(type&); \ 205 void operator=(type&); \
206 public: \ 206 public: \
207 operator rvalue_type&() { return *reinterpret_cast<rvalue_type*>(this); } \ 207 operator rvalue_type&() { return *reinterpret_cast<rvalue_type*>(this); } \
208 type Pass() { return type(*reinterpret_cast<rvalue_type*>(this)); } \ 208 type Pass() { return type(*reinterpret_cast<rvalue_type*>(this)); } \
209 private: 209 private:
210 210
211 #endif // BASE_MOVE_H_ 211 #endif // BASE_MOVE_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative/initializing_rules_registry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698