this post was submitted on 24 Sep 2023
1 points (66.7% liked)
C++
1783 readers
1 users here now
The center for all discussion and news regarding C++.
Rules
- Respect instance rules.
- Don't be a jerk.
- Please keep all posts related to C++.
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
so, that practice of calling .destroy() and then .deallocate() is redundant and error-prone
If you develop or debug a container, it is useful to have a special test class for the elements that covers potential container specific errors.
If I run your code with
ContainerTester
instead ofint
, i get:So it's more obvious that very bad things do happen :)
Oh and note, that
allocator::destroy
is deprecated in C++17 and was removed with C++20.i used tthe tester class with my code removing the .deallocate(), and although it doesnt crash, it still runs the destructor multiple times on the same element, i think its because im just pushing i into the container, and because that constructor creates an implicit conversion between int and ContainerTester, it creates a temporary object that gets destroyed once it is pushed into the deque, am i right?
-std=c++20
)dont worry, i have one more question, i should initialize variables with = or with {}?
Direct initialization is recommended over copy initialization (=).
Okay, to be fair: it's some sort of holy war, the answer depends on who you ask.