我知道过去曾进行过类似的讨论,但是我认为答案似乎已经过时了。多数人认为差异如下:
作用域-因为在旧问题上询问了在方法内部而不是作为类成员声明的这些对象的示例。
防止内存泄漏的安全性-旧问题使用原始指针而不是智能指针
以下面的示例为例,类Dog
是类Animal
的成员。并且正在使用智能指针。因此,范围和内存泄漏现在已无法解决。
这样说。用指针而不是普通对象声明类有什么好处?就我的示例而言,最基本的是-不考虑多态性等。
给出以下示例:
//Declare as normal object
class Dog
{
public:
void bark()
{
std::cout << "bark!" << std::endl;
}
void walk()
{
std::cout << "walk!" << std::endl;
}
};
class Animal
{
public:
Dog dog;
};
int main()
{
auto animal = std::make_unique<Animal>();
animal->dog.bark();
animal->dog.walk();
}
还有..
//Declare as pointer to class
class Dog
{
public:
void bark()
{
std::cout << "bark!" << std::endl;
}
void walk()
{
std::cout << "walk!" << std::endl;
}
};
class Animal
{
public:
Animal()
{
dog = std::make_unique<Dog>();
}
std::unique_ptr<Dog> dog;
};
int main()
{
auto animal = std::make_unique<Animal>();
animal->dog->bark();
animal->dog->walk();
}