CARVIEW |
Select Language
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 28 Jul 2025 21:24:27 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Location: /reference/memory/pointer_safety/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 28 Jul 2025 21:24:27 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
ETag: W/"7cb5-d7Ikk7O2gEpMu/RQ2l8wGdXfhx4"
Content-Encoding: gzip
This enum class type defines the possible pointer safety settings in C++, as returned by function get_pointer_safety.
A safely-derived pointer value is a pointer value returned by the default definition of operator new or a value derived from it by well-defined pointer arithmetic, pointer conversions or pointer reinterpretations (
When an implementation uses strict pointer safety, any object dynamically allocated using the default definition of operator new which cannot be traced either by a safely-derived pointer or an equivalent integer representation may be automatically destroyed, invalidating any pointer values that may point to it.
Notice that this does not affect memory allocated dynamically by other means, such as using C-library's malloc or custom redefinitions of opeator new.
Reference
C library:
- <cassert> (assert.h)
- <cctype> (ctype.h)
- <cerrno> (errno.h)
-
<cfenv> (fenv.h)C++11
- <cfloat> (float.h)
-
<cinttypes> (inttypes.h)C++11
- <ciso646> (iso646.h)
- <climits> (limits.h)
- <clocale> (locale.h)
- <cmath> (math.h)
- <csetjmp> (setjmp.h)
- <csignal> (signal.h)
- <cstdarg> (stdarg.h)
-
<cstdbool> (stdbool.h)C++11
- <cstddef> (stddef.h)
-
<cstdint> (stdint.h)C++11
- <cstdio> (stdio.h)
- <cstdlib> (stdlib.h)
- <cstring> (string.h)
-
<ctgmath> (tgmath.h)C++11
- <ctime> (time.h)
-
<cuchar> (uchar.h)C++11
- <cwchar> (wchar.h)
- <cwctype> (wctype.h)
Containers:
-
<array>C++11
- <deque>
-
<forward_list>C++11
- <list>
- <map>
- <queue>
- <set>
- <stack>
-
<unordered_map>C++11
-
<unordered_set>C++11
- <vector>
-
Input/Output:
Multi-threading:
-
<atomic>C++11
-
<condition_variable>C++11
-
<future>C++11
-
<mutex>C++11
-
<thread>C++11
-
Other:
- <algorithm>
- <bitset>
-
<chrono>C++11
-
<codecvt>C++11
- <complex>
- <exception>
- <functional>
-
<initializer_list>C++11
- <iterator>
- <limits>
- <locale>
- <memory>
- <new>
- <numeric>
-
<random>C++11
-
<ratio>C++11
-
<regex>C++11
- <stdexcept>
- <string>
-
<system_error>C++11
-
<tuple>C++11
-
<type_traits>C++11
-
<typeindex>C++11
- <typeinfo>
- <utility>
- <valarray>
<memory>
classes
- allocator
-
allocator_arg_tC++11
-
allocator_traitsC++11
- auto_ptr
- auto_ptr_ref
-
bad_weak_ptrC++11
-
default_deleteC++11
-
enable_shared_from_thisC++11
-
owner_lessC++11
-
pointer_traitsC++11
- raw_storage_iterator
-
shared_ptrC++11
-
unique_ptrC++11
-
uses_allocatorC++11
-
weak_ptrC++11
enum classes
-
pointer_safetyC++11
-
functions
-
addressofC++11
-
alignC++11
-
allocate_sharedC++11
-
const_pointer_castC++11
-
declare_no_pointersC++11
-
declare_reachableC++11
-
dynamic_pointer_castC++11
-
get_deleterC++11
-
get_pointer_safetyC++11
- get_temporary_buffer
-
make_sharedC++11
- return_temporary_buffer
-
static_pointer_castC++11
-
undeclare_no_pointersC++11
-
undeclare_reachableC++11
- uninitialized_copy
-
uninitialized_copy_nC++11
- uninitialized_fill
- uninitialized_fill_n
-
objects
-
allocator_argC++11
-
enum class
<memory>
std::pointer_safety
enum class pointer_safety { relaxed, preferred, strict };
Pointer safety enum
value | description |
---|---|
relaxed | The validity of a pointer value does not depend on whether it is a safely-derived pointer value. |
preferred | The validity of a pointer value does not depend on whether it is a safely-derived pointer value. A leak detector may be running so that the program can avoid spurious leak reports. |
strict | A pointer value that is not a safely-derived pointer value is an invalid pointer value (unless the referenced complete object is of dynamic storage duration and has previously been declared reachable). A garbage collector may be running so that non-traceable object are automatically deleted. |
A safely-derived pointer value is a pointer value returned by the default definition of operator new or a value derived from it by well-defined pointer arithmetic, pointer conversions or pointer reinterpretations (
reinterpret_cast
), including to and from other pointer types or integral types (at least as large as intptr_t), or from sequences of characters with the same size and alignment.When an implementation uses strict pointer safety, any object dynamically allocated using the default definition of operator new which cannot be traced either by a safely-derived pointer or an equivalent integer representation may be automatically destroyed, invalidating any pointer values that may point to it.
Notice that this does not affect memory allocated dynamically by other means, such as using C-library's malloc or custom redefinitions of opeator new.
See also
- get_pointer_safety
- Get pointer safety (function)
Home page | Privacy policy
© cplusplus.com, 2000-2025 - All rights reserved - v3.3.4s
Spotted an error? contact us
© cplusplus.com, 2000-2025 - All rights reserved - v3.3.4s
Spotted an error? contact us