我来自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++编程的新手,但我有Java经验.我需要有关如何将对象传递给C++中的函数的指导.
我是否需要传递指针,引用或非指针和非引用值?我记得在Java中没有这样的问题,因为我们只传递了保存对象引用的变量.
如果您还可以解释在哪里使用这些选项,那将会很棒.
随着新标准的出现(以及某些编译器中已有的部件),新类型std::unique_ptr应该是替代品std::auto_ptr.
它们的用法是否完全重叠(因此我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做))或者我应该注意一些在阅读文档时不明显的差异?
此外,如果它是一个直接替代品(为什么给它一个新的名称),而不仅仅是改善std::auto_ptr.
我一直在阅读关于C++的书中的STL容器,特别是关于STL及其容器的部分.现在我明白了每一个都有自己的特定属性,而且我已经接近记住了所有这些...但我还没有掌握的是在哪种情况下使用它们.
解释是什么?示例代码是更受欢迎的.
我想在向量中存储几个类的实例.由于所有类都继承自相同的基类,因此这是可能的.
想象一下这个程序:
#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方法来做到这一点.我希望完全兼容矢量(只是为了方便其他用户应该使用我的代码).
a的std::unique_ptr具体用途是什么,何时以及如何最好地使用?
我发现:
我已经知道了:
std::unique_ptr 是用C++ 11开发的替代品 std::auto_ptrstd::unique_ptr没有引用计数和它所指向的"拥有"对象std::unique_ptrstd::unique_ptr就是结构我想知道的是:
std::unique_ptr更好的(除了唯一性)别的std::unique_ptr利于std::shared_ptr在几乎所有情况下都能满足动态内存管理的需要,为什么我可以处理一std::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.我是对的,还是我还没有得到它?
资源获取是初始化(RAII)在C++中是常用的管理需要的清理代码某种方式在它们的寿命结束时,从资源的寿命delete荷兰国际集团new编指针释放文件句柄.
如何快速轻松地使用RAII来管理从C风格API获取的资源的生命周期?
在我的情况下,我想使用RAII从C风格的API中自动执行清理函数,当它发布的C风格资源的变量超出范围时.我不需要额外的资源包装,我想在这里最小化使用RAII的代码开销.有没有一种简单的方法可以使用RAII来管理C风格的API资源?
如何将C api封装到RAII C++类中?是相关的,但我不认为这是一个重复 - 这个问题是关于更完整的封装,而这个问题是关于获得RAII的好处的最小代码.
c++ ×10
c++11 ×6
pointers ×4
c++-faq ×3
unique-ptr ×3
auto-ptr ×1
boost ×1
c++14 ×1
polymorphism ×1
raii ×1
shared-ptr ×1
stl ×1