相关疑难解决方法(0)

我什么时候使用哪种指针?

好吧,所以我最后一次以C++为生,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.

那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*)和其他增强智能指针的建议.(像这样的东西会很棒).

c++ pointers smart-pointers c++-faq c++11

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

新的和删除在C++ 14中仍然有用吗?

鉴于可用性make_uniquemake_shared自动删除unique_ptr以及shared_ptr析构函数,在C++ 14中使用new和使用的情况(除了支持遗留代码之外)是delete什么?

c++ new-operator dynamic-memory-allocation c++11 c++14

59
推荐指数
2
解决办法
3809
查看次数

声明对象和赋值运算符的引用

我觉得这个问题很基本,可以在某个地方出现,但我似乎无法找到答案.

假设我有这个代码:

//class member function
std::map< std::string, std::string > myMap;

const std::map< std::string, std::string >& bar()
{
   return myMap;
}

void myFunc( std::map< std::string, std::string >& foo1 )
{
   foo1 = bar();
   std::map< std::string, std::string >& foo2 = bar();
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果我开始使用foo2,因为foo2是对bar()返回的同一实例的引用,我用foo2做的任何事都将反映在myMap中.但是foo1怎么样?foo1是否获得了myMap的副本,还是指向与bar()返回的实例相同的实例?c ++标准库说std :: map的赋值运算符会复制元素,但这是否意味着在foo2的声明中没有真正调用赋值运算符?

谢谢!

c++ reference assignment-operator

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

使用引用而不是指针,解决C++中的内存泄漏问题?

当对象的指针返回并且程序员忘记删除它时,大多数内存泄漏都会出现.

例如:

class my_class
{
  ...
};

my_class* func1()
{
  my_class* c = new my_class;
  return c;
}

int main()
{
  my_class* var1 = func1();
  ...
  // Programmer forgot delete the var1: delete var1;
  // -- or --
  // Doesn't know 'delete[] var1;' is correct or 'delete var1;'.
}
Run Code Online (Sandbox Code Playgroud)

当指向创建对象的指针并且程序员忘记删除它时,会出现一些内存泄漏.

例如:

class my_class
{
  ...
};

void func2(my_class* p)
{
  ...
}

int main()
{
  my_class* var3 = new my_class;

  func2(var3);

  // Does func2 deletes var3? Programmer doesn't know.
  // …
Run Code Online (Sandbox Code Playgroud)

c++ memory-leaks reference

9
推荐指数
2
解决办法
3604
查看次数

裸指针有多糟糕?

指向以其他方式分配的东西在C++中是否合理安全?

到目前为止,我一直在使用STL容器(在一种情况下,一个数组,但这是另一个问题)满足我所有的动态内存需求,因此我不需要显式使用该new关键字.我也很乐意使用普通的ol' int *foo类型指针来引用事物.现在我正在阅读关于智能指针的内容(我在Java上磨口,所以我以前从未担心过这个问题)而传统的智慧似乎是"裸指针不好,不要使用它们".

那我有多麻烦?我可以安全地继续使用裸指针,只要它们指向的东西有其他破坏条件吗?这是我可以逃避的事情,但将来应该避免吗?或者这是一场灾难,我应该在匆忙之后修复?

c++ pointers smart-pointers

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

智能指针vs拥有原始指针

据我所知,最好使用智能指针,而不是通过原始指针管理动态分配对象的生命周期,例如: MyObject* obj = new Object();

但是在某些框架/库中,它们总是返回/使用原始指针而不是智能指针(也许它们有自己的GC对象?我不知道).

它也更容易使用

 MyObject* obj = GetAObject(); // return raw owning pointer
Run Code Online (Sandbox Code Playgroud)

SharedPointer<MyObject> obj = GetAObject(); // return smart pointer
Run Code Online (Sandbox Code Playgroud)

应该总是使用智能指针而不是手动new/ delete(如上例所示),还是应该使用原始资源拥有指针?

c++ pointers

0
推荐指数
2
解决办法
1003
查看次数