मुझे कक्षा के उदाहरणों के पॉइंटर्स बनाने की आवश्यकता है, और प्रोग्राम संकलन समय पर नहीं जानता कि मैं कितने पॉइंटर्स बनाउंगा। हटाने के लिए, मैं एक वेक्टर में पॉइंटर्स को संग्रहीत करने पर विचार कर रहा था, और फिर उन्हें एक-एक करके हटा रहा था। स्मार्ट पॉइंटर्स का उपयोग करने के लिए एक क्लीनर तरीका होगा? और यदि कोई स्मार्ट पॉइंटर्स का उपयोग नहीं करना चाहता है, तो क्या वेक्टर का उपयोग साफ माना जाएगा?पॉइंटर्स के वेक्टर को हटाने
न्यूनतम कोड:
#include <vector>
using namespace std;
class Foo {
public:
Foo();
};
Foo::Foo(){}
void createFooVector(int nb, std::vector<Foo*> &v){
for(int i=0;i<nb;i++){
Foo* f = new Foo();
v.push_back(f);
}
}
int main(int argc, char *argv[]){
std::vector<Foo*> v;
createFooVector(5,v);
while (!v.empty()){
Foo* f = v.back();
v.pop_back();
delete f;
}
}
क्या आपको वाकई पॉइंटर्स के कंटेनर की आवश्यकता है? क्या आप अपनी 'Foo' ऑब्जेक्ट्स को मानों के रूप में स्टोर नहीं कर सकते ('std :: vector')? साथ ही, क्या यह स्पष्ट नहीं होगा कि 'createFooVector' ने तर्क के रूप में दिए गए को संशोधित करने के बजाय एक नया वेक्टर लौटाया हो? –
@LucTouraille मैं इस कारण से सूचक का उपयोग करता हूं: http://stackoverflow.com/questions/15471193/vector-of-virtual-class-are-pointers-the-clean-way-to-go ... यह नहीं हो सका हालांकि मैं यहां दिखाए गए कोड में देखा जा सकता है, इसे कम से कम – Vince