Skip to content

Commit

Permalink
未初期化メモリに対するアルゴリズム、例外発生時の振る舞いについて追記
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube committed Nov 8, 2023
1 parent 9a64346 commit 2f67b2a
Show file tree
Hide file tree
Showing 20 changed files with 71 additions and 0 deletions.
4 changes: 4 additions & 0 deletions reference/memory/ranges_uninitialized_copy.md
Expand Up @@ -83,6 +83,10 @@ return {std::move(ifirst), ofirst};
* iter_reference_t[link /reference/iterator/iter_reference_t.md]
* std::move[link /reference/utility/move.md]
## 例外
呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。
## 例
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/ranges_uninitialized_copy_n.md
Expand Up @@ -63,6 +63,10 @@ return {std::move(t.in).base(), t.out};
* default_sentinel[link /reference/iterator/default_sentinel_t.md]
* std::move[link /reference/utility/move.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


##
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/ranges_uninitialized_default_construct.md
Expand Up @@ -62,6 +62,9 @@ return first;
* remove_reference_t[link /reference/type_traits/remove_reference.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

## 備考
- [`std::vector`](/reference/vector/vector.md)クラスの要素数を変更する操作は、要素を値構築するためゼロ初期化が行われる。その値初期化のコストが気になるような場合に、デフォルト構築することでプログラマの責任で必要な分だけ任意に初期化でき、パフォーマンス向上が期待できるようになる。
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/ranges_uninitialized_default_construct_n.md
Expand Up @@ -38,6 +38,9 @@ return uninitialized_default_construct(counted_iterator(first, n),
* default_sentinel[link /reference/iterator/default_sentinel_t.md]
* base()[link /reference/iterator/counted_iterator/base.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

##
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/ranges_uninitialized_fill.md
Expand Up @@ -66,6 +66,9 @@ return first;
* remove_reference_t[link /reference/type_traits/remove_reference.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

##
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/ranges_uninitialized_fill_n.md
Expand Up @@ -37,6 +37,9 @@ return uninitialized_fill(counted_iterator(first, n), default_sentinel, x).base(
* default_sentinel[link /reference/iterator/default_sentinel_t.md]
* base()[link /reference/iterator/counted_iterator/base.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

##
```cpp example
Expand Down
5 changes: 5 additions & 0 deletions reference/memory/ranges_uninitialized_move.md
Expand Up @@ -84,6 +84,11 @@ return {std::move(ifirst), ofirst};
* std::move[link /reference/utility/move.md]
* ranges::iter_move[link /reference/iterator/iter_move.md]
## 例外
呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。
またその場合、`[ifirst, ilast)`内の一部のオブジェクトは有効だが未規定な状態として残される。
## 例
```cpp example
Expand Down
5 changes: 5 additions & 0 deletions reference/memory/ranges_uninitialized_move_n.md
Expand Up @@ -63,6 +63,11 @@ return {std::move(t.in).base(), t.out};
* default_sentinel[link /reference/iterator/default_sentinel_t.md]
* std::move[link /reference/utility/move.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

またその場合、`[ifirst, ifirst + n)`内の一部のオブジェクトは有効だが未規定な状態として残される。

##
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/ranges_uninitialized_value_construct.md
Expand Up @@ -62,6 +62,10 @@ return first;
* remove_reference_t[link /reference/type_traits/remove_reference.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


##
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/ranges_uninitialized_value_construct_n.md
Expand Up @@ -38,6 +38,10 @@ return uninitialized_value_construct(counted_iterator(first, n),
* default_sentinel[link /reference/iterator/default_sentinel_t.md]
* base()[link /reference/iterator/counted_iterator/base.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


##
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/uninitialized_copy.md
Expand Up @@ -51,6 +51,10 @@ namespace std {
## 戻り値
`result`

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


###
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/uninitialized_copy_n.md
Expand Up @@ -54,6 +54,10 @@ namespace std {
## 戻り値
`result`

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


###
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_default_construct.md
Expand Up @@ -38,6 +38,9 @@ for (; first != last; ++first)
## 戻り値
なし

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

## 備考
- [`std::vector`](/reference/vector/vector.md)クラスの要素数を変更する操作は、要素を値構築するためゼロ初期化が行われる。その値初期化のコストが気になるような場合に、デフォルト構築することでプログラマの責任で必要な分だけ任意に初期化でき、パフォーマンス向上が期待できるようになる。
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_default_construct_n.md
Expand Up @@ -37,6 +37,9 @@ return first;
* addressof[link addressof.md]
* iterator_traits[link /reference/iterator/iterator_traits.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

## 備考
- [`std::vector`](/reference/vector/vector.md)クラスの要素数を変更する操作は、要素を値構築するためゼロ初期化が行われる。その値初期化のコストが気になるような場合に、デフォルト構築することでプログラマの責任で必要な分だけ任意に初期化でき、パフォーマンス向上が期待できるようになる。
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_fill.md
Expand Up @@ -46,6 +46,9 @@ namespace std {
## 戻り値
なし

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

###
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_fill_n.md
Expand Up @@ -48,6 +48,9 @@ namespace std {
## 戻り値
`first`

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

###
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_move.md
Expand Up @@ -46,6 +46,9 @@ for (; first != last; ++result, ++first)
## 戻り値
`result`

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

###
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_move_n.md
Expand Up @@ -46,6 +46,9 @@ for (; n > 0; ++result, (void)++first, --n)
## 戻り値
`{first, result}`

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

###
```cpp example
Expand Down
3 changes: 3 additions & 0 deletions reference/memory/uninitialized_value_construct.md
Expand Up @@ -38,6 +38,9 @@ for (; first != last; ++first)
## 戻り値
なし

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。

###
```cpp example
Expand Down
4 changes: 4 additions & 0 deletions reference/memory/uninitialized_value_construct_n.md
Expand Up @@ -37,6 +37,10 @@ return first;
* addressof[link addressof.md]
* iterator_traits[link /reference/iterator/iterator_traits.md]

## 例外

呼び出すコンストラクタなどから例外がスローされた場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定の順序で破棄される。すなわち、例外がスローされた場合は初期化対象領域は未初期化のままとなる。


###
```cpp example
Expand Down

0 comments on commit 2f67b2a

Please sign in to comment.