कहो कि मेरे पास एक वर्ग है जो इस तरह दिखता है (यह सिर्फ एक उदाहरण है):
class A {
double *ptr;
public:
A() : ptr( new double[100] ) {}
A( const A &other ) {
other.ptr[7] = 15;
}
void doNotChangeMyData() const {
ptr[43] = 14;
}
void changeMyData() {
ptr[43] = 14;
}
~A() { delete[] ptr; }
};
constदोनों प्रतिलिपि निर्माता और में doNotChangeMyDataसमारोह कर ताकि ptrबदला नहीं जा सकता; हालाँकि, यह अभी भी मुझे इंगित की गई सरणी की सामग्री को संशोधित करने की अनुमति देता है ptr।
क्या केवल उदाहरणों ptrमें बदलाव से "सरणी constसावधान रहने" (या कच्चे सूचक से दूर जाने) की सामग्री को रोकने का कोई तरीका है ?
मुझे पता है कि मैं कुछ ऐसा कर सकता था
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
लेकिन मुझे नहीं करना होगा ...
std::vector::operator[]()सही मानों को संशोधित कर सकते हैं?
vectorकाम करेगा।
std::vector::operator[]() constएक constसंदर्भ देता है
std::vector