यह सुरक्षित है क्योंकि स्वैप ऑपरेशन के दौरान कुछ भी नहीं बनाया गया है। केवल कक्षा के डेटा सदस्यstd::vector
अदला-बदली होती है।
निम्नलिखित प्रदर्शनकारी कार्यक्रम पर विचार करें जो यह स्पष्ट करता है कि कक्षा की वस्तुओं की std::vector
अदला-बदली कैसे की जाती है।
#include <iostream>
#include <utility>
#include <iterator>
#include <algorithm>
#include <numeric>
class A
{
public:
explicit A( size_t n ) : ptr( new int[n]() ), n( n )
{
std::iota( ptr, ptr + n, 0 );
}
~A()
{
delete []ptr;
}
void swap( A & a ) noexcept
{
std::swap( ptr, a.ptr );
std::swap( n, a.n );
}
friend std::ostream & operator <<( std::ostream &os, const A &a )
{
std::copy( a.ptr, a.ptr + a.n, std::ostream_iterator<int>( os, " " ) );
return os;
}
private:
int *ptr;
size_t n;
};
int main()
{
A a1( 10 );
A a2( 5 );
std::cout << a1 << '\n';
std::cout << a2 << '\n';
std::cout << '\n';
a1.swap( a2 );
std::cout << a1 << '\n';
std::cout << a2 << '\n';
std::cout << '\n';
return 0;
}
कार्यक्रम का आउटपुट है
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4 5 6 7 8 9
जैसा कि आप केवल डेटा सदस्यों को देखते हैं ptr
n
हैं और सदस्य फ़ंक्शन स्वैप में स्वैप किए जाते हैं। न ही अतिरिक्त संसाधनों का उपयोग किया जाता है।
कक्षा में एक समान दृष्टिकोण का उपयोग किया जाता है std::vector
।
इस उदाहरण के लिए के रूप में
std::vector<Widget> WidgetVector;
std::vector<Widget2> Widget2Vector;
फिर विभिन्न वर्गों की वस्तुएं हैं। सदस्य फ़ंक्शन स्वैप उसी प्रकार के वैक्टर पर लागू होता है।