Skip to content

Commit 572dbce

Browse files
authored
Prevent accidental copies of expensive-to-copy object types (#20226)
Deleted copy constructor of classes that are expensive to copy. Some of these classes have const data members, so they previously had the move constructors implicitly deleted, making accidental copies even more likely. Also made the non-default move constructors `noexcept` to avoid implicit copies in container like `std::vector`. Authors: - Vukasin Milovanovic (https://github.com/vuule) Approvers: - Bradley Dice (https://github.com/bdice) - Lawrence Mitchell (https://github.com/wence-) - Nghia Truong (https://github.com/ttnghia) URL: #20226
1 parent 96e34d4 commit 572dbce

File tree

18 files changed

+111
-13
lines changed

18 files changed

+111
-13
lines changed

cpp/include/cudf/detail/utilities/stream_pool.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023-2024, NVIDIA CORPORATION.
2+
* Copyright (c) 2023-2025, NVIDIA CORPORATION.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,7 +32,11 @@ class cuda_stream_pool {
3232
// matching type used in rmm::cuda_stream_pool::get_stream(stream_id)
3333
using stream_id_type = std::size_t;
3434

35-
virtual ~cuda_stream_pool() = default;
35+
virtual ~cuda_stream_pool() = default;
36+
cuda_stream_pool(cuda_stream_pool const&) = delete;
37+
cuda_stream_pool(cuda_stream_pool&&) = delete;
38+
cuda_stream_pool& operator=(cuda_stream_pool const&) = delete;
39+
cuda_stream_pool& operator=(cuda_stream_pool&&) = delete;
3640

3741
/**
3842
* @brief Get a `cuda_stream_view` of a stream in the pool.
@@ -76,6 +80,9 @@ class cuda_stream_pool {
7680
* @return the number of stream objects in the pool
7781
*/
7882
[[nodiscard]] virtual std::size_t get_stream_pool_size() const = 0;
83+
84+
protected:
85+
cuda_stream_pool() = default;
7986
};
8087

8188
/**

cpp/include/cudf/join/sort_merge_join.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ namespace CUDF_EXPORT cudf {
4444
*/
4545
class sort_merge_join {
4646
public:
47+
sort_merge_join() = delete;
48+
sort_merge_join(sort_merge_join const&) = delete;
49+
sort_merge_join(sort_merge_join&&) = delete;
50+
sort_merge_join& operator=(sort_merge_join const&) = delete;
51+
sort_merge_join& operator=(sort_merge_join&&) = delete;
52+
4753
/**
4854
* @brief Construct a sort-merge join object that pre-processes the right table
4955
* on creation, and can be used on subsequent join operations with multiple

cpp/include/cudf/strings/regex/regex_program.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022-2024, NVIDIA CORPORATION.
2+
* Copyright (c) 2022-2025, NVIDIA CORPORATION.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -54,22 +54,24 @@ struct regex_program {
5454
regex_flags flags = regex_flags::DEFAULT,
5555
capture_groups capture = capture_groups::EXTRACT);
5656

57-
regex_program() = delete;
57+
regex_program() = delete;
58+
regex_program(regex_program const&) = delete;
59+
regex_program& operator=(regex_program const&) = delete;
5860

5961
/**
6062
* @brief Move constructor
6163
*
6264
* @param other Object to move from
6365
*/
64-
regex_program(regex_program&& other);
66+
regex_program(regex_program&& other) noexcept;
6567

6668
/**
6769
* @brief Move operator assignment
6870
*
6971
* @param other Object to move from
7072
* @return this object
7173
*/
72-
regex_program& operator=(regex_program&& other);
74+
regex_program& operator=(regex_program&& other) noexcept;
7375

7476
/**
7577
* @brief Return the pattern used to create this instance

cpp/src/io/avro/reader_impl.cu

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ class metadata : public file_metadata {
117117
public:
118118
explicit metadata(datasource* const src) : source(src) {}
119119

120+
metadata(metadata const&) = delete;
121+
metadata& operator=(metadata const&) = delete;
122+
metadata(metadata&&) = delete;
123+
metadata& operator=(metadata&&) = delete;
124+
120125
/**
121126
* @brief Initializes the parser and filters down to a subset of rows
122127
*

cpp/src/io/json/nested_json.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ struct device_json_column {
144144
// Type used to count number of rows
145145
using row_offset_t = size_type;
146146

147+
device_json_column(device_json_column const&) = delete;
148+
device_json_column& operator=(device_json_column const&) = delete;
149+
device_json_column(device_json_column&&) = default;
150+
device_json_column& operator=(device_json_column&&) = default;
151+
147152
// The inferred type of this column (list, struct, or value/string column)
148153
json_col_t type = json_col_t::Unknown;
149154

cpp/src/io/orc/aggregate_orc_metadata.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ class aggregate_orc_metadata {
6464
aggregate_orc_metadata(std::vector<std::unique_ptr<datasource>> const& sources,
6565
rmm::cuda_stream_view stream);
6666

67+
aggregate_orc_metadata(aggregate_orc_metadata const&) = delete;
68+
aggregate_orc_metadata& operator=(aggregate_orc_metadata const&) = delete;
69+
aggregate_orc_metadata(aggregate_orc_metadata&&) = delete;
70+
aggregate_orc_metadata& operator=(aggregate_orc_metadata&&) = delete;
71+
6772
[[nodiscard]] auto get_col_type(int col_idx) const
6873
{
6974
return per_file_metadata[0].ff.types[col_idx];

cpp/src/io/orc/orc.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,11 @@ class metadata {
614614
public:
615615
explicit metadata(datasource* const src, rmm::cuda_stream_view stream);
616616

617+
metadata(metadata const&) = delete;
618+
metadata& operator=(metadata const&) = delete;
619+
metadata(metadata&&) = default;
620+
metadata& operator=(metadata&&) = default;
621+
617622
[[nodiscard]] auto get_total_rows() const { return ff.numberOfRows; }
618623
[[nodiscard]] size_type get_num_stripes() const { return ff.stripes.size(); }
619624
[[nodiscard]] size_type get_num_columns() const { return ff.types.size(); }
@@ -671,7 +676,7 @@ class metadata {
671676
Metadata md;
672677
std::vector<StripeFooter> stripefooters;
673678
std::unique_ptr<orc_decompressor> decompressor;
674-
datasource* const source;
679+
datasource* source;
675680

676681
private:
677682
struct column_parent {

cpp/src/io/orc/reader_impl.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ class reader_impl {
8080
rmm::cuda_stream_view stream,
8181
rmm::device_async_resource_ref mr);
8282

83+
reader_impl(reader_impl const&) = delete;
84+
reader_impl& operator=(reader_impl const&) = delete;
85+
reader_impl(reader_impl&&) = delete;
86+
reader_impl& operator=(reader_impl&&) = delete;
87+
8388
/**
8489
* @copydoc cudf::io::orc::detail::reader::read
8590
*/

cpp/src/io/orc/reader_impl_chunking.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ struct orc_stream_info {
128128
* @brief Struct storing intermediate processing data loaded from data sources.
129129
*/
130130
struct file_intermediate_data {
131+
file_intermediate_data() = default;
132+
133+
file_intermediate_data(file_intermediate_data const&) = delete;
134+
file_intermediate_data& operator=(file_intermediate_data const&) = delete;
135+
file_intermediate_data(file_intermediate_data&&) = default;
136+
file_intermediate_data& operator=(file_intermediate_data&&) = default;
137+
131138
int64_t rows_to_skip;
132139
int64_t rows_to_read;
133140
std::vector<metadata::orc_stripe_info> selected_stripes;

cpp/src/io/orc/writer_impl.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,11 @@ class writer::impl {
249249
*/
250250
~impl();
251251

252+
impl(impl const&) = delete;
253+
impl& operator=(impl const&) = delete;
254+
impl(impl&&) = delete;
255+
impl& operator=(impl&&) = delete;
256+
252257
/**
253258
* @brief Writes a single subtable as part of a larger ORC file/table write.
254259
*

0 commit comments

Comments
 (0)