相关疑难解决方法(0)

从std :: vector中删除动态分配的对象

它是否正确?:

std::vector<Enemy*> enemies;
enemies.push_back(new Enemy());

Enemy* enemy = enemies[0];
enemies.erase(enemies.begin() + 0);
delete enemy;
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

在C++中,处理内存分配/删除的任何一般准则?

可能我所要求的只是一个链接到我尚未找到的网站.但是来自Java背景,在C++中处理内存分配和删除的一般原则是什么?我觉得我可能会在我的应用程序中添加各种内存泄漏.我意识到有几种智能指针的变种,你也可以提到它我,但我想专注于标准的C++指针.

c++ memory pointers memory-management

4
推荐指数
3
解决办法
724
查看次数

术语的含义 - 资源获取是初始化

我知道RAII做了什么.当代码抛出异常时,它就是防止内存泄漏等.

现在,我希望了解这个聪明术语的含义. http://en.wikipedia.org/wiki/Acquisition

获得意味着获得某些东

那么,当我们说资源获取是初始化时,这意味着什么?
我只是在谈论这里的术语的含义,而不是一般的概念.

c++ oop terminology raii

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

是否使用索引括号取消引用它?

为指针使用索引括号是否也取消引用它?为什么打印这个指针的第0个索引两次最终打印两个不同的东西?

#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;

int *p;

void fn() {
    int num[1];
    num[0]=99;
    p = num;
}

int main() {
    fn();
    cout << p[0] << "  " << p[0];
}
Run Code Online (Sandbox Code Playgroud)

c c++ memory arrays pointers

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

RAII:在const方法中初始化数据成员

RAII中,资源在访问之前不会初始化.但是,许多访问方法被声明为常量.我需要调用mutable(非const)函数来初始化数据成员.

示例:从数据库加载

struct MyClass
{
  int get_value(void) const;

  private:
     void  load_from_database(void); // Loads the data member from database.

     int m_value;
};

int
MyClass ::
get_value(void) const
{
  static bool value_initialized(false);
  if (!value_initialized)
  {
    // The compiler complains about this call because
    // the method is non-const and called from a const
    // method.
    load_from_database();
  }
  return m_value;
}
Run Code Online (Sandbox Code Playgroud)

我的原始解决方案是将数据成员声明为mutable.我宁愿不这样做,因为它表明其他方法可以改变成员.

如何转换load_from_database()语句以摆脱编译器错误?

c++ const-correctness lazy-evaluation

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

malloc有什么优势?

为某些数据分配内存有什么好处.相反,我们可以使用它们的数组.

喜欢

 int *lis;
 lis = (int*) malloc ( sizeof( int ) * n );

 /* Initialize LIS values for all indexes */
 for ( i = 0; i < n; i++ )
 lis[i] = 1;
Run Code Online (Sandbox Code Playgroud)

我们可以使用普通的数组.

好吧,我不明白malloc是如何工作的,实际上是做什么的.所以解释它们对我来说会更有益.

假设我们sizeof(int) * nn用上面的代码替换然后尝试存储整数值,我可能面临哪些问题?有没有办法直接从内存分配空间打印存储在变量中的值,例如这里是lis

c++ arrays malloc dynamic-allocation variable-length-array

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

对于由其他对象组成的C++类,使这些成员对象成为指针是一种好习惯吗?

我问的是关于成员"mylist"的更好的做法是什么:

像这样声明mylist:

class MyClaz {
  std::list<string> mylist;
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者像这样声明:

class MyClaz {
  std::list<string> *mylst;
  MyClaz();
  ...
}

MyClaz::MyClaz() {
  myList = new std::list<string>();
}
// plus destructor to delete myList
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,当创建MyClaz实例时,是否会自动分配mylist?当MyClaz被销毁时,它会被正确清理吗?

是否有理由使用第二种情况?这似乎更危险.

c++ memory-management

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

这种异常处理方式是否良好?

你会改变这段代码中的任何内容吗?

class LocalPort {
public:
    LocalPort(int portNumber) {
      innerPort = new ACMEPort(portNumber);
   }

    void Open() {
      try {
          innerPort->Open();
      } 
      catch (DeviceResponseException& e) {
          throw PortDeviceFailure(e);
      } 
      catch (ATM1212UnlockedException& e) {
         throw PortDeviceFailure(e);
      } 
      catch (GMXError& e) {
         throw PortDeviceFailure(e);
      }
   } 
private: 
    ACMEPort* innerPort;
};

/////////

try {
    LocalPort* port = new LocalPort(12);
    port->Open();
} 
catch (bad_alloc& e) {
    ReportError(e);
    logger.Log("Wyj?tek alokacji pami?ci", e);
    delete port;
}
catch (PortDeviceFailure& e) {
    ReportError(e);
    logger.Log(e.getMessage(), e);
    delete port;
} 
Run Code Online (Sandbox Code Playgroud)

上面 …

c++ exception-handling exception

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

返回局部变量

我今天遇到了一个关于局部变量的问题.我了解到......

 int * somefunc()
 {
     int x = 5;
     return &x;
 }

 int * y = somefunc();
 //do something
Run Code Online (Sandbox Code Playgroud)

是坏的,不安全的等等.我想这个案子是一样的......

int * somefunc()
{
    int * x = new int;
    x = 5;
    return x;
}

int * y = somefunc();
//do something
delete y;
Run Code Online (Sandbox Code Playgroud)

我一直认为这是最安全的印象,因为当它返回时x的地址保持在范围内.但是,我现在有了第二个想法,我认为这会导致内存泄漏和其他问题,就像第一个例子那样.有人可以帮我确认吗?

c++ pointers scope

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