C++ 如何解决Qt上这个简单的内存泄漏问题?

C++ 如何解决Qt上这个简单的内存泄漏问题?,c++,qt,C++,Qt,我在qt creator中的应用程序中存在内存泄漏问题 我有一个类(a),它的属性中有一个指向类型B对象的指针 这些B类指针中的每一个都被初始化为第三个类C,该类将指针传递给类a,并将其添加到其向量中 类有一个deleteBfromVector()方法。 此方法在C.cpp中调用,并且在其参数中包含要删除的指向B的指针 C是Qt设计器表单类,不是C++类。 我的问题是:如何删除(使用“delete”)要从类A向量中删除的指针,从而避免内存泄漏 我必须在C班做吗 显然,这样描述的课程已经被重新调

我在qt creator中的应用程序中存在内存泄漏问题

我有一个类(a),它的属性中有一个指向类型B对象的指针

这些B类指针中的每一个都被初始化为第三个类C,该类将指针传递给类a,并将其添加到其向量中

类有一个
deleteBfromVector()
方法。 此方法在C.cpp中调用,并且在其参数中包含要删除的指向B的指针

C是Qt设计器表单类,不是C++类。

我的问题是:如何删除(使用“delete”)要从类A向量中删除的指针,从而避免内存泄漏

我必须在C班做吗

显然,这样描述的课程已经被重新调整和简化,专门用来问你这个问题,只关注问题

我正在写下面的代码:

class A{
 public:
    void add_B_to_vector(B* b_to_add){
    B_pointers_vector.push_back(b_to_add);
   }
    void remove_B_to_vector(B* b_to_remove){
    B_pointers_vector.erase(b_to_remove);
    // Here I would like to make b_to_remove be deleted from memory,and not just removed from vector            
 }
 private:
//...
vector <B*> B_pointers_vector;

};

class B{
    // attributes and methods of B
};
A类{
公众:
void add_B_to_vector(B*B_to_add){
B_指针向量。推回(B_到_相加);
}
void remove_B_to_vector(B*B_to_remove){
B_指针_向量。擦除(B_到_移除);
//在这里,我想让b_to_remove从内存中删除,而不仅仅是从向量中删除
}
私人:
//...
向量B_指针_向量;
};
B类{
//B的属性和方法
};

std::vector
…尽可能使用
shared\u ptr
unique\u ptr
。否则,如果从
A
中删除时总是要将其删除,则在删除方法中将其设置为
delete
。但是,如果
C
正在创建它们,那么它通常也应该删除它们。我想需要更多关于设计的信息。
我必须在类C中这样做吗?
当保存指针的实例被删除时,拥有这些指针的类负责删除它们。因此,如果
C
将所有权转移给
A
,那么
A
应该在其实例被破坏时删除这些。如果程序的设计使
C
保留所有权,并且只提供指向
A
的指针,则
C
应删除这些指针。由于缺少此信息,因此无法确定谁应该执行删除操作。请使用析构函数上的delete删除指针,并且更多的代码将更好地理解您所执行的操作。“初始化为…C”是什么意思?为什么C在这里很重要?
std::vector
…如果可以,可以使用
shared\u ptr
unique\u ptr
。否则,如果从
A
中删除时总是要将其删除,则在删除方法中将其设置为
delete
。但是,如果
C
正在创建它们,那么它通常也应该删除它们。我想需要更多关于设计的信息。
我必须在类C中这样做吗?
当保存指针的实例被删除时,拥有这些指针的类负责删除它们。因此,如果
C
将所有权转移给
A
,那么
A
应该在其实例被破坏时删除这些。如果程序的设计使
C
保留所有权,并且只提供指向
A
的指针,则
C
应删除这些指针。由于缺少此信息,因此无法确定谁应该执行删除操作。请使用析构函数上的delete删除指针,并且更多的代码将更好地理解您所执行的操作。“初始化为…C”是什么意思?为什么C在这里很重要?