Qt new-多个实例或指向单个实例的指针
Qt new - multiple instances or a pointer to the single one
我需要确认我是否正确。我已经创建了一个QSlider和一个带有cos函数的图。Slider连接到slot_print(int)。目的是移动函数。我用两种不同的方式完成了它:
//---the first way
void plot::slot_print(int a){
cosinusdata->setData(a);
**curve->setData(cosinusdata);**
this->replot();
};
//the second way
void plot::slot_print(int a){
**curve->setData(new CosinusData(a));**
this->replot();
};
//the CosinusData class
class CosinusData: public QwtSyntheticPointData{
public:
int b;
CosinusData(int a):QwtSyntheticPointData(1000){b=a;}
double y(double x) const {return b*qCos(x);}
void setData(int a){b=a;}
};
// constructor
plot::plot()
{
setAxisScale(QwtPlot::xBottom,-3.0,12.5,2);
setAxisScale(QwtPlot::yLeft,-3.0,14.5,3);
curve = new QwtPlotCurve();
**cosinusdata = new CosinusData(1);**
curve->setData(cosinusdata);
curve->attach(this);
}
我不想创建CosinusData类的多个实例。我只想要一个,所以我想第一种方法就可以了。我说得对不对?每次接受信号时,第二个实例都会创建一个新实例,这是真的吗?
每次接受信号时,第二个实例都会创建一个新实例,这是真的吗?
是的。
第二种方法是,每次调用都动态分配内存。除非"curve->setData"拥有CosinusData的所有权,否则它在完成后不会删除它,这就是在泄露内存!
可能最快的修复方法是用QSharedPointer包装您正在传递的CosinusData,但如果可以的话,最好避免每次调用的动态分配和释放。
我不能肯定地说第一个解决方案,因为我看不到代码的其他部分(指针所有权的一部分)。从指针的角度来看,这似乎是可以的。但由于你要复制和传递两次(首先到余弦数据,然后到曲线),请确保这里没有昂贵的操作。
相关文章:
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 通过单个实例从多个类访问一个类
- 如何在C++中调试单个容器实例的大小
- 传递单个或向量对象时没有重载函数的实例
- Qt - 打开窗口的单个实例
- 如何在崩溃时管理Qt应用程序的单个实例
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 函数的单个实例
- cout 对象是否保持单个实例,即它永远不会被复制
- C++程序的单个实例,使用boost::interprocess
- 许多QPropertyAnimation实例与单个实例相比
- 每个层次结构的单个单一实例继承
- 最大化qt中单个实例应用程序的已运行实例
- Qt new-多个实例或指向单个实例的指针
- 为C++中模板的所有实例生成的单个机器代码实例:它是否可行和/或可能
- 对于单个实例应用程序,只允许使用单个窗口消息框
- 单个类实例在GUI exe和dll中是不同的
- 如何按值从vector中删除元素,但只能删除该值的单个实例
- 单独对象的单个模板实例化