相关疑难解决方法(0)

我可以创建一个auto_ptr数组吗?

我有一个基类,它由多个派生类继承.我想创建baseClass指针的autopointer数组.当我初始化那些autopointer我得到一些编译时错误,然后我试图这样做

std::auto_ptr<base>pbase[3];

std::auto_ptr<base> b1(new derived1());
std::auto_ptr<base> b2(new derived2());
std::suto_ptr<base> b3(new derived3());

pbase[0] = b1;
pbase[1] = b2;
pbase[2] = b3;
Run Code Online (Sandbox Code Playgroud)

它工作正常,我修复了内存泄漏问题,而我一个窗口,我不使用valgrind,我使用boost框架泄漏.

编译错误:

class A{
 public:
  std::auto_ptr<base>pbase[2];
}
Run Code Online (Sandbox Code Playgroud)

在A.cpp文件中

A::A():pbase[0](new derived1()), pbase[1](new derived2()){
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误 C2059:syntax error : '['

c++ auto-ptr visual-studio-2010 visual-c++

4
推荐指数
1
解决办法
1038
查看次数

在std :: vector中存储具有std :: auto_ptr作为其成员变量的类的对象是否安全?

我不能在我的项目中使用shared_ptr,没有提升:(

所以,我的课程大致类似于下面的课程:

class MyClass
{
private:
  std::auto_ptr<MyOtherClass> obj;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想在std :: vector中存储上面类的实例.安全吗?我在这里读到 std :: auto_ptr与STL容器一起使用是错误的.这适用于我的情况吗?

c++ memory-management stl

3
推荐指数
1
解决办法
518
查看次数

Qt和auto_ptr

我刚刚发现了auto_ptr的概念,我很喜欢它!由于Qt经常需要QList或QVector <(某些QObject或QWidget)*>,是否应该避免使用auto_ptr的具体原因.如果我是对的,它允许你替换它:

std::vector<MyClass*> vec;
/* add several elements to the vector and do stuff with them */
for(size_t i=0; i<vec.length(); ++i)
{
    delete vec[i];
}
vec.clear();
Run Code Online (Sandbox Code Playgroud)

用更短的东西(即没有清理)

std::vector<auto_ptr<MyClass>> vec;
/* add several elements to the vector and do stuff with them */
// no need for the delete loop
Run Code Online (Sandbox Code Playgroud)

... Qt仍然可以使用auto_ptr进行共享内存魔术吗?父子自动记忆管理是否仍然透明地运作?谢谢

c++ qt auto-ptr

3
推荐指数
1
解决办法
4399
查看次数

引用容器对象的子集

我有一个关于引用集合子集的快速问题.考虑我有一个对象矢量.现在我想创建另一个向量,它是此向量的子集,我不想创建对象子集的副本.

我正在考虑的方法之一是创建一个vector<auto_ptr<MyClass> >.这是一个好方法吗?如果您认为在这种情况下任何其他容器或习语或模式会有所帮助,请建议.谢谢

c++ auto-ptr

3
推荐指数
1
解决办法
1058
查看次数

我是否需要删除静态std :: map?

在某些类中,我有一个带有指针的静态std :: map.我的问题是,如果我需要在程序结束时删除或自动释放此内存.我关心的是当删除std :: map时,是否通过析构函数正确删除了存储在内部的指针.

谢谢.

c++ stl stdmap

3
推荐指数
1
解决办法
2362
查看次数

C++破坏列表

我有一个类使用一些回调来进行计算.那些回调需要分配需要在回调范围之外生存的数据(动态数组),而不是在类破坏之后.我想过当一个类破坏时vector,auto_ptr它会自动被破坏:

class MyClass
{
    vector<auto_ptr<MyObject>> ThingsToDie;
};
Run Code Online (Sandbox Code Playgroud)

问题是我分配了很多对象,并且它们不共享基类型,所以我不能使用vector它,并为每种类型制作一个向量是很多工作.
如下所示的层次结构:

auto_ptr_base (virtual destructor)
      |
 auto_ptr<T>
Run Code Online (Sandbox Code Playgroud)

将解决我的问题,因为我可以做类似的事情

class MyClass
{
    vector<auto_ptr_base> ThingsToDie;
};
Run Code Online (Sandbox Code Playgroud)

并且将自动将销毁实际分派给每个专用类型.
问题是STL没有那个层次结构,我不想重新实现auto_ptr.
还有其他解决方案吗?

c++ shared-ptr

1
推荐指数
1
解决办法
125
查看次数

c ++链接列表 - 插入对象

我有一个通用的链表,可以处理各种类型的数据,包括对象和指向对象的指针等,但是当我从一个派生自抽象类的类中插入对象时,我无法使用该列表.

我有一个名为vehicle的抽象类和2个carr和卡车类,我可以这样做:

list<vehicle> lv;

vehicle * v1;
vehicle * v2;

v1 = new carr;
v2 = new truck;

cin >> *v1 >> *v2;

//But when I try to insert in the list

lv.insertEnd(*v1);
Run Code Online (Sandbox Code Playgroud)

我有错误:

不能分配抽象类型'车辆'的对象

并且编译器显示错误是在我编写的部分中的链表代码的insertEnd方法中:

newNode->item = new Item;
Run Code Online (Sandbox Code Playgroud)

这是一个项目的一部分,我需要有一个车辆列表,车辆可以是卡车,卡车等.我有一组车辆实施指针指针,但我试图用一个车辆列表这样做.

你能帮助我吗?

编辑:该项目在我的链接列表中,我将显示我的insertEnd方法:

template <class Item>
void list<Item>::insertEnd(const Item& item)
{
    node<Item> *newNode= new node<Item>;

    newNode->item = new Item;
    *(newNode->item) = item;
    newNode->next = 0;

    if(head == 0)
    {
       head = newNode;
       tail = newNode;
        _size++;
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c++ list insert object abstract

0
推荐指数
1
解决办法
1976
查看次数