The C++ wrappers create a temporary variable for a parameter to be passed to a function. This is initially default constructed and then copy assigned from the instance being passed in from the target language. This is unchanged, however, when the temporary variable is passed to wrapped function, it is now done using std::move. If the type is move constructible, the move constructor will be used instead of the copy constructor. Note that the implementation calls std::move for all user-defined types (non-primitive types passed by value), this excludes anything passed by pointer, reference and arrays. It does also include any type that has not been defined/parsed by SWIG, that is, unknown types. std::move is called via the SWIG_STD_MOVE macro which only calls std::move for C++11 and later code.
51 lines
1.2 KiB
Java
51 lines
1.2 KiB
Java
|
|
import cpp11_move_only.*;
|
|
|
|
public class cpp11_move_only_runme {
|
|
|
|
static {
|
|
try {
|
|
System.loadLibrary("cpp11_move_only");
|
|
} catch (UnsatisfiedLinkError e) {
|
|
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
public static void main(String argv[]) {
|
|
|
|
// Output
|
|
{
|
|
Counter.reset_counts();
|
|
MoveOnly mo = MoveOnly.create();
|
|
mo.delete();
|
|
Counter.check_counts(1, 0, 0, 2, 0, 3);
|
|
}
|
|
|
|
{
|
|
Counter.reset_counts();
|
|
MovableCopyable mo = MovableCopyable.create();
|
|
mo.delete();
|
|
Counter.check_counts(2, 1, 0, 0, 1, 3);
|
|
}
|
|
|
|
// Move semantics not used
|
|
{
|
|
Counter.reset_counts();
|
|
MovableCopyable mo = MovableCopyable.createConst();
|
|
mo.delete();
|
|
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, 0, 1, 1, 0, 2);
|
|
mo.delete();
|
|
Counter.check_counts(2, 0, 1, 1, 0, 3);
|
|
}
|
|
}
|
|
}
|