// Assume class definition for Cat is here.
Cat makeCat() {
Cat lady = new Cat("fluffy");
return lady;
}
int main (...) {
Cat molly = makeCat();
molly->eatFood();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否会出现"免费使用"错误molly->eatFood()?
Not*_*ist 23
更正了您的程序并创建了一个示例实现class Cat:
#include <iostream>
#include <string>
class Cat {
public:
Cat(const std::string& name_ = "Kitty")
: name(name_)
{
std::cout << "Cat " << name << " created." << std::endl;
}
~Cat(){
std::cout << "Cat " << name << " destroyed." << std::endl;
}
void eatFood(){
std::cout << "Food eaten by cat named " << name << "." << std::endl;
}
private:
std::string name;
};
Cat* makeCat1() {
return new Cat("Cat1");
}
Cat makeCat2() {
return Cat("Cat2");
}
int main (){
Cat kit = makeCat2();
kit.eatFood();
Cat *molly = makeCat1();
molly->eatFood();
delete molly;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它会产生输出:
Cat Cat2 created.
Food eaten by cat named Cat2.
Cat Cat1 created.
Food eaten by cat named Cat1.
Cat Cat1 destroyed.
Cat Cat2 destroyed.
Run Code Online (Sandbox Code Playgroud)
我建议你在继续之前学习一本关于C++封面的基础书.
除了在程序结束时发生内存泄漏外,对于内存的无效使用没有错误。如果在堆上创建了某些东西(例如使用new),则需要调用delete它以释放它。
您也有很多语法错误,下面将进行更正。
Cat* makeCat()
{
Cat *lady = new Cat("fluffy");
return lady;
}
int main (int argc, char** argv)
{
Cat* molly = makeCat();
molly->eatFood();
delete molly;//This was added
return 0;
}
Run Code Online (Sandbox Code Playgroud)