相关疑难解决方法(0)

1730
推荐指数
11
解决办法
54万
查看次数

我为什么要使用指针而不是对象本身?

我来自Java背景,并开始使用C++中的对象.但是我遇到的一件事是人们经常使用指向对象的指针而不是对象本身,例如这个声明:

Object *myObject = new Object;
Run Code Online (Sandbox Code Playgroud)

而不是:

Object myObject;
Run Code Online (Sandbox Code Playgroud)

或者,不要使用函数,比如说testFunc():

myObject.testFunc();
Run Code Online (Sandbox Code Playgroud)

我们要写:

myObject->testFunc();
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚为什么我们这样做呢.我认为它与效率和速度有关,因为我们可以直接访问内存地址.我对吗?

c++ pointers c++11

1532
推荐指数
12
解决办法
30万
查看次数

如何将对象传递给C++中的函数?

我是C++编程的新手,但我有Java经验.我需要有关如何将对象传递给C++中的函数的指导.

我是否需要传递指针,引用或非指针和非引用值?我记得在Java中没有这样的问题,因为我们只传递了保存对象引用的变量.

如果您还可以解释在哪里使用这些选项,那将会很棒.

c++ pointers c++-faq pass-by-reference pass-by-value

245
推荐指数
4
解决办法
13万
查看次数

std :: auto_ptr到std :: unique_ptr

随着新标准的出现(以及某些编译器中已有的部件),新类型std::unique_ptr应该是替代品std::auto_ptr.

它们的用法是否完全重叠(因此我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做))或者我应该注意一些在阅读文档时不明显的差异?

此外,如果它是一个直接替代品(为什么给它一个新的名称),而不仅仅是改善std::auto_ptr.

c++ smart-pointers auto-ptr unique-ptr c++11

182
推荐指数
4
解决办法
6万
查看次数

在哪种情况下我使用特定的STL容器?

我一直在阅读关于C++的书中的STL容器,特别是关于STL及其容器的部分.现在我明白了每一个都有自己的特定属性,而且我已经接近记住了所有这些...但我还没有掌握的是在哪种情况下使用它们.

解释是什么?示例代码是更受欢迎的.

c++ stl container-data-type

179
推荐指数
6
解决办法
6万
查看次数

什么时候应该使用原始指针而不是智能指针?

在阅读完这个答案后,看起来最好尽可能使用智能指针,并将"普通"/原始指针的使用量降至最低.

真的吗?

c++ boost pointers smart-pointers

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

将派生类对象存储在基类变量中

我想在向量中存储几个类的实例.由于所有类都继承自相同的基类,因此这是可能的.

想象一下这个程序:

#include <iostream>
#include <vector>
using namespace std;

class Base
{
    public:
    virtual void identify ()
    {
        cout << "BASE" << endl;
    }
};

class Derived: public Base
{
    public:
    virtual void identify ()
    {
        cout << "DERIVED" << endl;
    }
};

int main ()
{
    Derived derived;

    vector<Base> vect;
    vect.push_back(derived);

    vect[0].identify();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望它能打印"DERIVED",因为"识别"方法是虚拟的.相反,'vect [0]'似乎是一个'Base'实例,它打印出来

基础

我想我可以写一个我自己的容器(可能是从vector派生的),不知何故能够做到这一点(也许只能拿指针......).我只是想问一下是否有更多的C++ ish方法来做到这一点.我希望完全兼容矢量(只是为了方便其他用户应该使用我的代码).

c++ polymorphism object-slicing

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

std :: unique_ptr的推荐用法

a的std::unique_ptr具体用途是什么,何时以及如何最好地使用?

我发现:

关于unique_ptr表演

我已经知道了:

  1. std::unique_ptr 是用C++ 11开发的替代品 std::auto_ptr
  2. a std::unique_ptr没有引用计数和它所指向的"拥有"对象
  3. a没有复制/分配 std::unique_ptr
  4. 当我需要一个独特的指针时,std::unique_ptr就是结构

我想知道的是:

  1. 是否使用了std::unique_ptr更好的(除了唯一性)别的
    东西?在这种情况下我会得到什么?
  2. 如果是这样,在什么情况下何时?
  3. 鉴于需要移动语义,这会不会有std::unique_ptr利于
    整体?
  4. 如果std::shared_ptr在几乎所有情况下都能满足动态内存管理的需要,为什么我可以处理一std::unique_ptr件事(同样,
    除了唯一性)?

c++ smart-pointers unique-ptr c++11

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

我应该使用shared_ptr还是unique_ptr?

我有一个关于std::unique_ptr和的问题std::shared_ptr.我知道有很多关于何时使用哪一个的问题,但我仍然不确定我是否正确理解它.我在某处读到了智能指针的默认选择std::unique_ptr,但据我了解,我应该更喜欢使用std::shared_ptr.例如,我有:

class B;
class A
{
private:
   B* b;
public:
   B* getB();
};

A::getB()
{
   return b;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上类A拥有指向类型对象的指针,B并且有一个返回该指针的方法.如果我创建了getter,我假设其他一些类可以访问这个指针,因此它应该shared_ptr代替unique_ptr.我是对的,还是我还没有得到它?

c++ smart-pointers shared-ptr unique-ptr c++11

25
推荐指数
2
解决办法
2万
查看次数

使用RAII从C风格的API管理资源

资源获取是初始化(RAII)在C++中是常用的管理需要的清理代码某种方式在它们的寿命结束时,从资源的寿命delete荷兰国际集团new编指针释放文件句柄.

如何快速轻松地使用RAII来管理从C风格API获取的资源的生命周期?

在我的情况下,我想使用RAII从C风格的API中自动执行清理函数,当它发布的C风格资源的变量超出范围时.我不需要额外的资源包装,我想在这里最小化使用RAII的代码开销.有没有一种简单的方法可以使用RAII来管理C风格的API资源?

如何将C api封装到RAII C++类中?是相关的,但我不认为这是一个重复 - 这个问题是关于更完整的封装,而这个问题是关于获得RAII的好处的最小代码.

c++ raii c++-faq c++11 c++14

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