Test copy constructor and assignment operator calls for movable types

This is the current state of play where the copy constructor and copy
assignment operators are called, even for movable types passed as
function parameters.
This commit is contained in:
William S Fulton 2022-07-08 08:01:55 +01:00
commit 1ece69cafd
4 changed files with 37 additions and 0 deletions

View file

@ -27,6 +27,8 @@ struct MoveOnly {
static MoveOnly create() { return MoveOnly(111); } static MoveOnly create() { return MoveOnly(111); }
// static const MoveOnly createConst() { return MoveOnly(111); } // not supported by default // static const MoveOnly createConst() { return MoveOnly(111); } // not supported by default
// static void take(MoveOnly mo) { if (debug) cout << "take(MoveOnly)" << " " << &mo << endl; }
}; };
%} %}
@ -48,5 +50,7 @@ struct MovableCopyable {
static MovableCopyable create() { return MovableCopyable(111); } static MovableCopyable create() { return MovableCopyable(111); }
static const MovableCopyable createConst() { return MovableCopyable(111); } static const MovableCopyable createConst() { return MovableCopyable(111); }
static void take(MovableCopyable mc) { if (debug) cout << "take(MovableCopyable)" << " " << &mc << endl; }
}; };
%} %}

View file

@ -4,6 +4,8 @@ using cpp11_move_onlyNamespace;
public class cpp11_move_only_runme { public class cpp11_move_only_runme {
public static void Main() { public static void Main() {
// Output
Counter.reset_counts(); Counter.reset_counts();
using (MoveOnly mo = MoveOnly.create()) { using (MoveOnly mo = MoveOnly.create()) {
} }
@ -19,5 +21,14 @@ public class cpp11_move_only_runme {
using (MovableCopyable mo = MovableCopyable.createConst()) { using (MovableCopyable mo = MovableCopyable.createConst()) {
} }
Counter.check_counts(2, 1, 1, 0, 0, 3); Counter.check_counts(2, 1, 1, 0, 0, 3);
// Input
Counter.reset_counts();
using (MovableCopyable mo = new MovableCopyable(222)) {
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 1, 1, 0, 0, 2);
}
Counter.check_counts(2, 1, 1, 0, 0, 3);
} }
} }

View file

@ -14,6 +14,7 @@ public class cpp11_move_only_runme {
public static void main(String argv[]) { public static void main(String argv[]) {
// Output
{ {
Counter.reset_counts(); Counter.reset_counts();
MoveOnly mo = MoveOnly.create(); MoveOnly mo = MoveOnly.create();
@ -35,5 +36,16 @@ public class cpp11_move_only_runme {
mo.delete(); mo.delete();
Counter.check_counts(2, 1, 1, 0, 0, 3); Counter.check_counts(2, 1, 1, 0, 0, 3);
} }
// Input
{
Counter.reset_counts();
MovableCopyable mo = new MovableCopyable(222);
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 1, 1, 0, 0, 2);
mo.delete();
Counter.check_counts(2, 1, 1, 0, 0, 3);
}
} }
} }

View file

@ -1,5 +1,6 @@
from cpp11_move_only import * from cpp11_move_only import *
# Output
Counter.reset_counts() Counter.reset_counts()
mo = MoveOnly.create() mo = MoveOnly.create()
del mo del mo
@ -15,3 +16,12 @@ Counter.reset_counts()
mo = MovableCopyable.createConst() mo = MovableCopyable.createConst()
del mo del mo
Counter.check_counts(2, 1, 1, 0, 0, 3) Counter.check_counts(2, 1, 1, 0, 0, 3)
# Input
Counter.reset_counts()
mo = MovableCopyable(222)
Counter.check_counts(1, 0, 0, 0, 0, 0)
MovableCopyable.take(mo)
Counter.check_counts(2, 1, 1, 0, 0, 2)
del mo
Counter.check_counts(2, 1, 1, 0, 0, 3)