相关疑难解决方法(0)

表达式必须具有类类型

我已经用c ++编写了一段时间,当我尝试编译这个简单的代码片段时,我遇到了困难

class A
{
  public:
    void f() {}
};

int main()
{
  {
    A a;
    a.f(); // works fine
  }

  {
    A *a = new A();
    a.f(); // this doesn't
  }
}
Run Code Online (Sandbox Code Playgroud)

c++ class new-operator

74
推荐指数
4
解决办法
23万
查看次数

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万
查看次数

为什么C++默认析构函数不会破坏我的对象?

C++规范说默认析构函数删除所有非静态成员.然而,我无法实现这一目标.

我有这个:

class N {
public:
    ~N() {
        std::cout << "Destroying object of type N";
    }
};

class M {
public:
    M() {
        n = new N;
    }
//  ~M() { //this should happen by default
//      delete n;
//  }
private:
    N* n;
};
Run Code Online (Sandbox Code Playgroud)

然后这应该打印给定的消息,但它不会:

M* m = new M();
delete m; //this should invoke the default destructor
Run Code Online (Sandbox Code Playgroud)

c++ destructor default

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

std ::引用的向量

我有这样的问题:我有课Foo,如果有这个类的一些对象,

Foo a();
Run Code Online (Sandbox Code Playgroud)

我需要把这个对象放到两个不同的向量:

std::vector<Foo> vA, vB;
Run Code Online (Sandbox Code Playgroud)

如果a在改变vA应该改变了vB,载体vAvB可以不同,但它们可以有相同的对象.我知道可以使用Boost,但我不能使用Boost.

c++ stl vector

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

C++ vector push_back

将新对象元素推送到std::vector?的正确方法是什么?我希望数据在向量中分配.这会将对象复制newradio到向量中,然后newradio在超出范围时(例如在堆栈外)摆脱它吗?

vector<Radio> m_radios;
Radio newradio(radioNum);
m_radios.push_back(newradio);
Run Code Online (Sandbox Code Playgroud)

然后当我释放包含的对象时m_radios,这将释放向量分配的所有内存吗?

c++ vector

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

是否可以将自动引用计数(ARC)引入C++?

Objective C引入了一项名为ARC的技术,使开发人员免于内存管理的负担.这听起来不错,我认为如果g ++也有这个功能,C++开发人员会非常高兴.

ARC允许您将内存管理的负担放在(Apple LLVM 3.0)编译器上,从不再考虑保留,释放和自动释放

所以,如果LLVM3.0可以做到这一点,我认为g ++也可以让C++开发人员摆脱内存管理的艰巨任务,对吧?

将ARC引入C++有什么困难吗?

我的意思是:如果我们不使用智能指针,我们只使用new/ new[],编译器是否可以为我们做些什么来防止内存泄漏?例如,自动将新指针更改为智能指针?

c++ memory-management

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

Qt中的智能指针

就像它已经写在这里 Qt到目前为止有8个特定的智能指针类.它看起来就像你需要的一切.但是,为了使用这些智能指针中的任何一个,您的类必须从QObject派生,这并不总是方便的.在Qt中是否有其他智能指针实现可以与任意类一起使用?

c++ qt smart-pointers

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

如何将智能指针返回到成员变量?

我正在尝试使用智能指针为类成员变量创建一个访问器.这是代码:

class MyResource
{
};

class MyClass
{
public:
    std::unique_ptr<MyResource> getResource();
private:
    std::unique_ptr<MyResource> resource;
};

std::unique_ptr<MyResource> MyClass::getResource()
{
    return this->resource;
}
Run Code Online (Sandbox Code Playgroud)

我试图编译这个错误:

无法访问类'std :: unique_ptr <_Ty>'中声明的私有成员

添加.getthis->resource当然不会,因为返回类型的变化工作.

我不应该在这里使用unique_ptr吗?这只是一个语法问题吗?我完全走错了路吗?

我的智能指针背景: 我已经使用了几年的普通指针,部分原因是因为我找不到何时使用哪种智能指针以及如何使用它们的可靠解释.我已经厌倦了找借口,所以我只是潜入.我想我明白智能指针是什么以及为什么要使用它们,但我对细节知之甚少.目前,我完全迷失在关于智能指针 无尽 问答中 .

c++ smart-pointers c++11

17
推荐指数
2
解决办法
3576
查看次数

删除指针数组

确实delete[] a,在那里a被指针的动态分配的数组,执行delete对于在阵列中的每个指针?

我想,它为具有用户定义类的数组执行析构函数,但是指针发生了什么?

c++ arrays pointers delete-operator

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

为什么以及何时需要提供自己的删除器?

为什么以及何时需要提供自己的删除器?关键字不delete足够吗?

如果您使用智能指针来管理分配的内存以外的资源new,请记住传递删除器.


更新:

正如在评论中被问到的那样,我不清楚引用的文本和示例的原因是我在想某些东西是错误的,这是因为我一直在考虑智能指针只是为了动态内存管理而发明的.所以这个例子使用智能指针管理非动态内存让我感到困惑.

老人的一个很好的解释:

智能指针根本不关心动态内存本身.它只是一种在需要时跟踪某些东西的方法,并在它超出范围时销毁它.提到文件句柄,网络连接等的要点是指出它们不是动态内存,但智能指针可以管理它们就好了.


C++ Primer 5th采用伪网络连接(不定义析构函数)来说明.

坏:

struct destination; // represents what we are connecting to
struct connection; // information needed to use the connection
connection connect(destination*); // open the connection
void disconnect(connection); // close the given connection
void f(destination &d /* other parameters */)
{
// get a connection; must remember to close it when done
connection c = connect(&d);
// use the connection
// if we …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers

15
推荐指数
2
解决办法
1899
查看次数