यह एक असाइनमेंट ऑपरेटर (के रूप में मैं जानता हूँ कि दो लाइनों, बराबर हैं जहाँ तक) का उपयोग नहीं करता। =
वाक्य रचना में प्रयोग किया जाता है लेकिन वास्तव में operator=
नहीं किया जाता है: असाइनमेंट ऑपरेटर बुरी तरह से है या नहीं लागू किया गया है
myClass myVariable;
myVariable = myClass(123);
हैं, तो पहले बयान काम करता है, दूसरा हो सकता है (:
myClass myVariable = myClass(123);
//or
myClass myVariable(123);
यह एक असाइनमेंट ऑपरेटर का उपयोग करता है और सबसे अधिक संभावना है) दुर्घटना।
#include <iostream>
#include <string.h>
using namespace std;
class Dvector
{
public:
Dvector(int thesize = 0)
{
std::cout << "Constructing object of size " << thesize << std::endl;
size = thesize;
data = new double[size];
}
Dvector(const Dvector& v)
{
std::cout << "Constructing object of size " << v.size << " by copy" << std::endl;
size = v.size;
data = new double[size];
memcpy(data, v.data, sizeof(double)*size);
}
Dvector& operator=(const Dvector& v)
{
std::cout << "Assigning object of size " << v.size << std::endl;
if (&v != this)
{
size = v.size;
data = new double[size];
memcpy(data, v.data, sizeof(double)*size);
}
return *this;
}
~Dvector()
{
std::cout << "Destroying object" << std::endl;
delete [] data;
}
private:
double* data;
int size;
};
int main() {
Dvector v = Dvector(3);
return 0;
}
प्रदर्शित करता है:
Constructing object of size 3
Destroying object
जब:
int main() {
Dvector v;
v = Dvector(3);
return 0;
}
प्रदर्शित करता है:
Constructing object of size 0
Constructing object of size 3
Assigning object of size 3
Destroying object
Destroying object
और अगर प्रतिलिपि निर्माता परिभाषित नहीं किया गया था दुर्घटनाग्रस्त हो गया है | ... क्योंकि तब v.data
इंगित करने के लिए समाप्त होता है अस्थायी चर (Dvector(3)
) द्वारा आवंटित data
और फिर हटा दिया गया। संभावित दुर्घटना जब v.data
या पर v
विनाश (पहले से ही मुक्त कर दिया स्मृति को हटाने) का उपयोग करने की कोशिश कर रहा।
एक बार संकलित कोई अंतर नहीं। –