1. Objects behavior¶
1.1. Everything is reference¶
To provide a direct translation between the C++ API and Python, as well as to reduce the redundant memory allocation, all the objects (except Accessor and LinOp) in Cytnx are references, also in C++, just like in Python.
Let’s look at the following example. Consider the Tensor object in Cytnx
In Python:
1A = cytnx.Tensor([2,3])
2B = A
3
4print(B is A) # true
In C++:
1auto A = cytnx::Tensor({2, 3});
2auto B = A;
3
4cout << cytnx::is(B, A) << endl;
Output >>
True
Note
In Python, this is very straight forward. We implement the is clause in the Cytnx C++ API, such that C++ and Python can have exactly the same behavior. You can use is() to check if two objects are the same.
1.2. clone¶
In the case where a copy of an object is needed, you can use clone().
In Python:
1A = cytnx.Tensor([2,3]);
2B = A;
3C = A.clone();
4
5print(B is A)
6print(C is A)
In C++:
1auto A = cytnx::Tensor({2, 3});
2auto B = A;
3auto C = A.clone();
4
5cout << cytnx::is(B, A) << endl;
6cout << cytnx::is(C, A) << endl;
Output >>
True
False
Note
Here, we use Tensor as an example, but in general all the objects in Cytnx (except Accessor and LinOp) also follow the same behavior, and you can use is and clone as well.