我有一个指针设置为一个新的对象数组:
Animal* pAnimals = new Animal[10];
Animal
类有一个名为Dog
的子类,具有一些更具体的功能。
我需要让pAnimals
指针数组中的一些对象成为狗,但不是全部。这是我到目前为止所尝试的,但内存泄漏:
Animal* pAnimals = new Animal[10];
Animal ** pCurrent = &pAnimals;
for (size_t i = 0; i < 8; i++)
{
*(pCurrent + i) = new Dog();
}
我知道Animal* pAnimals = new Animal[10];
正在堆上创建10个Animal
个对象,所以我需要稍后删除它们。
答案 0 :(得分:1)
您必须先创建一个Animal
- 指针的数组。
Dog
然后,您可以创建std::vector
的子类实例,如std:array
。正如其他人所建议的那样,你应该考虑使用#include <iostream>
using namespace std;
class Animal {};
class Dog : public Animal {};
int main()
{
Animal **pAnimaly = new Animal*[10];
for (size_t i = 0; i < 10; i++)
{
cout << pAnimaly[i] << endl;
}
cout << "---" << endl;
for (size_t i = 0; i < 8; i++)
{
pAnimaly[i] = new Dog();
}
for (size_t i = 0; i < 10; i++)
{
cout << pAnimaly[i] << endl;
if (pAnimaly[i] != nullptr) {
cout << "Freeing memory.." << endl;
delete pAnimaly[i];
}
}
return 0;
}
或$('.box').not('.' + optionValue)
而不是普通的数组,但我认为它只是一个讲座,所以做一些低水平的学习可能很好。
optionValue
答案 1 :(得分:0)
看看这个。也许它会帮助你。
有一个Animal
类(非常简单,但这只是一个例子)并且有两个派生类。然后在main
函数中,有vector
shared_ptr
到Animal
s。其中一些指针指向Animal
个对象,其他指针指向Dog
或Cat
s。
#include <random>
#include <vector>
#include <memory>
class Animal {
public:
virtual ~Animal() = default;
};
class Dog : public Animal {
};
class Cat : public Animal {
};
int main() {
std::random_device gen;
std::uniform_int_distribution<unsigned int> dist(0, 2);
std::vector<std::shared_ptr<Animal>> animals;
for(unsigned int i = 0; i < 10; ++i) {
animals.push_back([&] () -> std::shared_ptr<Animal> {
switch(dist(gen)) {
case 0:
return std::make_shared<Animal>();
case 1:
return std::make_shared<Dog>();
case 2:
return std::make_shared<Cat>();
}
}());
}
}
答案 2 :(得分:-1)
Animal* animals[10];
for(int i = 0; i < 8; i++)
{
animals[i] = new Dog();
}
animals[8] = new Animal();
animals[9] = new Animal();