小编use*_*005的帖子

为什么这不是C++中的内存泄漏?

几个月前,我问过这个问题,我问为什么会有内存泄漏.显然,我忘记了一个虚拟的析构函数.

现在我很难理解为什么这不是内存泄漏:

#include <iostream>
#include <vector>
#include <memory>


using namespace std;

class Base{
public:
    explicit Base(double a){
        a_ = a;
    }
    virtual void fun(){
        cout << "Base " << a_ << endl;
    }

protected:
    double a_;
};


class Derived : public Base{
public:
    Derived(double a, double b): Base(a), b_{b}{
    }
    void fun() override{
        cout << "Derived " << a_ << endl;
    }
private:
    double b_;
};



int main() {

    vector<unique_ptr<Base> > m;

    for(int i=0; i<10; ++i){
        if(i%2 == …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memory-leaks undefined-behavior unique-ptr

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

热图中的旋转轴刻度标签

当我在 MATLAB 2018b 上生成热图图时,x-tick 标签会自动旋转,但通常以我不喜欢的角度旋转。

我想硬编码它们应该始终旋转 90 度。通常,此代码可以解决问题:

ax = gca;
ax.XTickLabelRotation = 90
Run Code Online (Sandbox Code Playgroud)

或者

xtickangle(90)
Run Code Online (Sandbox Code Playgroud)

但热图不支持这两个版本。

如何在热图中手动旋转 XTickLables?


可重现的例子:

cdata = [45 60 32; 43 54 76; 32 94 68; 23 95 58];
xvalues = {'Small','Medium','Large'};
yvalues = {'Green','Red','Blue','Gray'};
h = heatmap(xvalues,yvalues,cdata);
xtickangle(90)
Run Code Online (Sandbox Code Playgroud)

matlab plot rotation heatmap axis-labels

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

Eigen 中立方根的性能改进

我确实使用 Valgrind(使用“带有调试信息的发布”构建)分析了我的代码,并发现在我计算大矩阵的元素立方根的一行上花费了大量时间(~25%) . 现在,如果可能的话,我想加快这一步。

目前,我只是使用.pow( 1.0 / 3.0). 我想知道是否有办法改善这一点,也许通过使用std::cbrt()?但是我如何将这个函数传递给 Eigen 以进行元素立方根?

#include "iostream"
#include "eigen-3.3.7/Eigen/Dense"

using namespace Eigen;
int main() {
  // generate some random numbers
  VectorXd v = VectorXd::Random(10).array().abs() ;
  std::cout << v << std::endl << std::endl ;

  // calculate the cubic root
  VectorXd s = v.array().pow( 1.0 / 3.0 );
  std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ performance eigen

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

班级成员应该是指针吗?

我有点困惑.如果你搜索(智能)指针的有用性,你会得到非常不同的意见.几乎每个人都同意应该使用智能指针而不是普通指针,但也有很多意见认为你不应该在现代C++中使用指针.

让我们考虑一下这种抽象情况(类似于我的问题):你有一个类"服装",其成员类型为"帽子"

class Hat {
public:
    enum class HatType{
        sombrero,
        sun hat,
        helmet,
        beanie,
        cowboy_hat
    };
    // some functions
private:
    HatType type;
    // some members
}

class Clothes {
public:
    // some functions
private:
    Hat currentHat;
    // some other members of other types
}
Run Code Online (Sandbox Code Playgroud)

如果我要更改HatHat*(或unique_ptr<Hat>?),运行时间是否有任何差异.(在许多功能中Clothes你需要调用一些东西Hat)

我问的原因是因为有很多不同类型的帽子.像阔边帽,太阳帽,头盔,帽子和牛仔帽.现在我的班级帽子有一个存储帽子类型的枚举器.帽子类型仅与一个特定功能相关,Hat但这是最常用的功能.

现在我switch case在这个特定的函数中使用了一个简单的函数,并且基于hat类型,函数的评估有点不同.这很好但我认为简单地为每个不同的帽子类型创建一个自己的类会更聪明,它继承自一个主Hat类并覆盖一个函数.

要做到这一点,我想我将不得不更改成员currentHatClothes任何类型的指针.我研究过这会对我的表现产生任何负面影响(我想过可能是因为我的currentHat物体和我的Clothes物体在记忆中的位置可能相隔很远,但我不知道这是否会发生,如果这会产生任何负面影响与现代编译器).

在我的研究中,我经常读到应该避免使用指针,这让我思考......我发现的一些信息也很老,我不知道这是否已经过时了.有没有更好的方法来做到这一点?

有没有人遇到过这种问题?在花费大量时间改变整个项目之前,最好先得到一些反馈......

附注:我把ClothesHats仅作为例子.在我的实际应用程序中,我有不同的类型,我从类型创建了数百万个对象 …

c++ oop pointers class

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

CMake find_package 包路径

是否有一个变量存储与包版本类似的找到的包的路径?

find_package(name)
message("name version: ${name_VERSION}") #something like this but only for path to package?
Run Code Online (Sandbox Code Playgroud)

cmake

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