मैं एक वर्ग परिभाषा निम्न के समान है:डिफ़ॉल्ट प्रतिलिपि काम
class UUID
{
public:
// Using implicit copy assignment operator
private:
unsigned char buffer[16];
};
मैं सिर्फ एक इकाई परीक्षण मुझ पर असफल है कि पुष्टि करने गया था कि प्रति काम ठीक से काम किया है। मेरे आश्चर्य के लिए, बफर [] सरणी के बीच में एक बाइट गलत तरीके से कॉपी किया गया था।
मेरे समझ डिफ़ॉल्ट प्रति असाइनमेंट ऑपरेटर प्रदर्शन करती है कि सदस्य वार नकल, और कहा कि सरणी सदस्यों के लिए (पॉइंटर करने वाली सरणी सदस्य नहीं) है कि सरणी के elementwise प्रतिलिपि जरूरत पर जोर देता है। क्या मैं गलत हूँ?
मेरे पेट यहाँ लग रहा है कि मैं एक झूलने सूचक कहीं कि मेरे सरणी के बीच पर stomped है ने काट लिया गया है। लेकिन, मैं इसे दोहराना देख रहा हूं, उदाहरण के लिए मैं इन वस्तुओं के एक वेक्टर को दूसरे वेक्टर में कॉपी करता हूं।
कोई मुझे यह बताने की परवाह करता है कि मैं गलत कहां गया हूं?
संपादित करें:
यदि यह कुछ पर विस्तार करने के लिए, कक्षा एक पॉड प्रकार नहीं है - यह कुछ सार आधार वर्ग से निकला है और इस तरह एक आभासी नाशक है। हालांकि, सरणी केवल डेटा सदस्य है, और उपयोग जो इकाई परीक्षण में तोड़ दिया यह था:
const int n = 100;
std::vector<UUID> src, dst;
src.reserve(n);
dst.resize(n);
for (int i = 0; i < n; ++i) {
UUID id;
src.push_back(id);
}
for (int i = 0; i < n; ++i) {
dst[i] = src[i];
}
bool good = true;
for (int i = 0; i < n; ++i) {
const bool thisGood = (dst[i] == src[i]);
std::cout << "i = " << i << " -> src = '" << src[i]
<< "', dst = '" << dst[i] << "', src == dst ? "
<< thisGood << '\n';
good = (good && thisGood);
}
आप कैसे पता चला 'बफर [] सरणी गलत ढंग से कॉपी के बीच में एक बाइट। " परीक्षण मामले के साथ दिखाया गया है? क्या कोई विशेष प्रविष्टि (100 में से) है जो दूषित हो रही है? – Chubsdad
@Chubsdad: यूयूआईडी कक्षा में एक स्ट्रीम इंसर्टर अधिभारित है जो सदस्य सरणी की सामग्री को डंप करता है। इस परीक्षण के मामले में, वेक्टर के सभी 100 तत्वों में उनके बफर [9] बाइट दूषित होते हैं, ठीक उसी मूल्य के लिए। –
ठीक है। क्या ओवरलोडेड ऑपरेटर == दिखाना संभव है? – Chubsdad