1. Introdution
本文我们将使用了boost::shared_ptr来创建共享指针对象,并且实现多态的功能。
2.Example
#include <iostream>
#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
class Layer{
public:
virtual void print(){ std::cout<<"Layer Init...!"<<std::endl;};
};
class obstacle_layer:public Layer
{
void print()
{
std::cout << "Obstacle layer Init...!" << std::endl;
}
};
class static_layer:public Layer
{
void print()
{
std::cout << "static layer Init...!"<< std::endl;
}
};
class inflation_layer:public Layer
{
public:
int a_;
const char* s_;
inflation_layer(int a,const char* s):a_(a),s_(s){}
void print()
{
std::cout<<"inflation layer Init...!"<<"Current Progress is:"<<a_<<" "<<s_<<"."<<std::endl;
}
};
int main() {
//初始化障碍物层
boost::shared_ptr<Layer> pluginObstacle(new obstacle_layer());
pluginObstacle->print();
//初始化静态层
boost::shared_ptr<Layer> pluginStatic(new static_layer());
pluginStatic->print();
//初始化膨胀层
boost::shared_ptr<Layer> pluginInflation(new inflation_layer(100,"%"));
pluginInflation->print();
return 0;
}
首先,我们创建了三个共享指针对象 pluginObstacle
、pluginStatic
和 pluginInflation
。
pluginObstacle
指向obstacle_layer
的对象。pluginStatic
指向static_layer
的对象。pluginInflation
指向inflation_layer
的对象。
由于 obstacle_layer
、static_layer
和 inflation_layer
都是 Layer
类的子类,因此可以将它们作为 Layer
类型的指针进行使用。这就实现了多态性,即可以通过基类的指针来操作不同派生类的对象。
这样,就可以使用基类的指针对象来操作派生类的对象,并且在运行时动态地选择适当的函数实现。这就是使用多态性的一种常见做法。
3.为社么要使用共享指针?
使用共享指针(Shared Pointer)主要有以下好处:
-
内存管理:共享指针的核心作用是实现对动态分配内存的自动管理。在C++中,共享指针对象会自动处理对象的创建和删除,避免了手动管理内存的复杂性。这可以降低程序出现内存泄漏的风险,提高程序的稳定性。
-
资源借用:共享指针实现了资源的无缝借用。多个对象可以共享同一个资源,从而减少内存占用和提高程序运行效率。当一个对象不再被使用时,共享指针会自动回收资源,避免资源的浪费。
-
对象生命周期管理:共享指针内置了对象的生命周期管理功能,可以方便地跟踪和管理对象的生命周期。当一个对象被多次引用时,共享指针会确保对象在所有引用都被清除后自动删除,避免了内存泄漏和悬挂指针等问题。
-
智能指针:C++11引入了智能指针的概念,智能指针是一种更高级的共享指针,它可以在对象被销毁前自动管理资源。这使得智能指针在处理动态内存分配和资源管理方面更加高效和便捷。
-
降低程序耦合度:使用共享指针可以降低程序中对象之间的耦合度。通过共享指针,可以将对象的创建和销毁交给运行时系统自动处理,使得对象之间的依赖关系更加简单和清晰。
-
便于并发编程:共享指针有利于实现并发编程。在多线程环境下,共享指针可以确保对象的正确访问和同步,从而降低并发编程的复杂性。
总之,使用共享指针可以提高程序的可维护性、稳定性和性能,降低内存泄漏风险,简化对象生命周期管理,并有助于实现并发编程。在实际项目中,熟练掌握和运用共享指针技术对于提升
4.Performance
(1)我们将上述代码文件命名为virtual.cpp。
(2)然后在ubuntu系统下执行如下命令:
g++ -std=c++11 virtual.cpp -lpthread -lboost_system -lboost_thread -o virtual
(3)然后执行:
./virtual
(4)运行结果如下:
Relatedworks
- C++ vector 使用类作为模板参数/C++多态展示
- C++ Boost Thread 编程总结
- C++类中运算符(operator())的重载
- C++boost线程唤醒