小编Yuk*_*awa的帖子

如何删除默认构造函数?

有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数.在C++ 11中,我可以这样做:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};
Run Code Online (Sandbox Code Playgroud)

但目前我的讲师不允许我在我的任务中这样做.问题是:在C++ 11之前,有没有办法告诉编译器隐式提供默认构造函数?

c++

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

什么是强指针和弱指针

我对"强指针"和"弱指针"的概念感到困惑.Diane Hackborn自己说:

当有强大的指针时,物体将保持在周围; 一旦最后一个被释放它就会被销毁.使用弱指针可以做的就是比较并试图提升为强指针; 如果对象上没有其他强指针,后者将失败.

这对我来说还不太清楚.强指针是否等同于a(boost::)共享指针?弱指针的作用是什么,只是为了试图将自己推向强指针?比如,我们什么时候需要弱点和强点?

更新:

谢谢大家,但我专门询问有关Android的内核spwp,和他们无关,在所有的Java引用.

基本上我试图破解这里的代码http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html 并不真正理解使用spwp

更新:

实际答案在于接受答案的评论.感谢Gabe Sechan:

强指针和弱指针是不同的智能指针实现,并且做同样的事情 - 当指针超出范围时,只要至少一个强指针引用它,它就不会被释放.如果只有弱指针(或没有)引用它.每当对其进行强或弱引用时,都会进行检查.

如果我有10个弱引用引用相同的对象,并且其中一个超出范围,该对象将被销毁?虽然有强指针,但只有当它们全部10个超出范围时才会销毁对象?

是的,差不多.如果你只有10个弱指针,当最后一个强指针超出范围时,它可能已经超出了范围.如果有剩余内存,实现可能会允许它延长一点时间,但如果你进入低内存条件它将被切断,并且听起来不像它的实现是从她的引用提前.并且使用它仍然主要是缓存 - 它大致相当于boost shared_ptr和boost weak_ptr.所以基本上,弱指针可以让它引用的对象随时消失.

c android-source android-binder

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

C++"虚函数但没有虚拟析构函数"

我有一个基类Media和几个派生类,即DVD,Book等...的基类写为:

class Media{
    private:
        int id;
        string title;
        int year;
    public:
        Media(){ id = year = 0; title = ""; }
        Media(int _id, string _title, int _year): id(_id), title(_title), year(_year) {}
//      virtual ~Media() = 0;
        void changeID(int newID){ id = newID; }
        virtual void print(ostream &out);
};
Run Code Online (Sandbox Code Playgroud)

事情是:没有析构函数,GCC给了我一堆警告class has virtual functions but non-virtual destructor,但仍然编译,我的程序工作正常.现在我想摆脱那些烦人的警告,所以我通过添加一个虚拟析构函数来满足编译器,结果是:它没有编译,错误:

undefined reference to `Media::~Media()`
Run Code Online (Sandbox Code Playgroud)

使析构函数纯虚拟并不能解决问题.出了什么问题?

c++

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

覆盖函数而不扩展类

假设我有一个A类:

public class A {
    public A(){....}
    public void method1() {...}
};
Run Code Online (Sandbox Code Playgroud)

并且该类的一个实例:

A anA = new A();
Run Code Online (Sandbox Code Playgroud)

有没有办法覆盖method1()唯一的anA?这个问题出现在我写一个小的绘画程序时,我必须JPanel多次扩展该类,只是为了对具有稍微不同特征的不同面板进行微小的改动.

java

23
推荐指数
2
解决办法
6949
查看次数

OpenCV的fitEllipse()有时会返回完全错误的省略号

我的目标是识别图像中存在的所有形状.这个想法是:

  1. 提取轮廓
  2. 使每个轮廓适合不同的形状
  3. 正确的形状应该是具有最接近轮廓区域的区域.

示例图片: 在此输入图像描述

我用它fitEllipse()来找到轮廓最合适的椭圆,但结果有点乱: 在此输入图像描述

可能正确的椭圆用蓝色填充,边界椭圆用黄色填充.可能不正确的轮廓用绿色填充,(错误的)边界椭圆是青色.

正如您所看到的,在第一行中限定三角形的椭圆看起来非常适合最佳拟合.第三行中三角形的边界椭圆似乎不是最合适的,但仍然可以作为拒绝不正确椭圆的标准.

但我无法理解为什么剩下的三角形在其轮廓之外完全具有边界椭圆.最坏的情况是最后一行中的第三个三角形:椭圆是完全错误的,但碰巧有一个区域靠近轮廓的区域,因此三角形被错误地识别为椭圆.

我想念什么吗?我的代码:

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace std;
using namespace cv;

void getEllipses(vector<vector<Point> >& contours, vector<RotatedRect>& ellipses) {
    ellipses.clear();
    Mat img(Size(800,500), CV_8UC3);
    for (unsigned i = 0; i<contours.size(); i++) {
        if (contours[i].size() >= 5) {
            RotatedRect temp = fitEllipse(Mat(contours[i]));
            if (area(temp) <= 1.1 * contourArea(contours[i])) {
                //cout << area(temp) << " < 1.1* " << contourArea(contours[i]) << endl;
                ellipses.push_back(temp);
                drawContours(img, contours, i, Scalar(255,0,0), -1, 8);
                ellipse(img, temp, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing

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

Kuwahara过滤器的奇怪结果

我正在用C++实现一个Kuwahara过滤器,OpenCV帮助打开和显示图像.这个想法非常简单,但不知怎的,我得到了奇怪的结果.这是'cose:

#include "opencv2/opencv.hpp"
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;
using namespace cv;

//This class is essentially a struct of 4 Kuwahara regions surrounding a pixel, along with each one's mean, sum and variance.
class Regions{
    int* Area[4];
    int Size[4];
    unsigned long long Sum[4];
    double Var[4];
    int kernel;
public:
    Regions(int _kernel) : kernel(_kernel) {
        for (int i = 0; i<4; i++) {
            Area[i] = new int[kernel*kernel];
            Size[i] = 0;
            Sum[i] = 0;
            Var[i] = 0.0;
        }
    }

    //Update …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing computer-vision

10
推荐指数
1
解决办法
2500
查看次数

使用没有第二个参数的imread打开图像时,什么是颜色模式?BGR还是RGB?

问题是当我需要将它转换为HSV时,CV_BGR2HSV和CV_RGB2HSV给我不同的结果:所以我真的需要知道打开时的颜色顺序是什么,imread或者如何强制imread以任何特定的顺序打开图像.

在此输入图像描述

c++ opencv

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

C++中双冒号的完整名称

如果我有课:

class A{
public:
    A();
    void print();
private:
    int value;
};

A::A() {value = 0;}
void A::print() {cout << value << endl;}
Run Code Online (Sandbox Code Playgroud)

最后两行中::符号的完整名称是什么?

c++

6
推荐指数
3
解决办法
1250
查看次数

Haskell,定义一个无限列表,动态添加数据并同时排序.怎么样?

我必须定义一个列表,其中:

  • 1是会员
  • 如果n是成员,则2n + 1和3n + 1也是如此

因此列表是无限的,必须进行排序.加载到GHCi时,命令:

"take 10 theList"
Run Code Online (Sandbox Code Playgroud)

将产生:

[1,3,4,7,9,10,13,15,19,21]
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

theList = ([1] ++ concat [[(x*2+1),(x*3+1)]|x<-theList])
Run Code Online (Sandbox Code Playgroud)

它似乎工作,除了它没有排序,与上面相同的命令产生:

[1,3,4,7,10,9,13,15,22,21]
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法解决这个问题?谢谢

haskell list lazy-evaluation

5
推荐指数
1
解决办法
632
查看次数

Java 8中有哪种lambda表达式语法?

这是关于lambda表达式的一个问题.我对行语法感到困惑check((h, l) -> h > l, 0);:

check()函数需要Climb对象和int.上面的行不提供任何Climb对象.什么h > l, 0意思?

interface Climb {
  boolean isTooHigh(int height, int limit);
}

class Climber {
  public static void main(String[] args) {
    check((h, l) -> h > l, 0);
  }
  private static void check(Climb climb, int height) {
    if (climb.isTooHigh(height, 1)) 
      System.out.println("too high");
    else 
      System.out.println("ok");
  }
}
Run Code Online (Sandbox Code Playgroud)

java lambda

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