有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数.在C++ 11中,我可以这样做:
class MyClass
{
public:
MyClass() = delete;
};
Run Code Online (Sandbox Code Playgroud)
但目前我的讲师不允许我在我的任务中这样做.问题是:在C++ 11之前,有没有办法告诉编译器隐式提供默认构造函数?
我对"强指针"和"弱指针"的概念感到困惑.Diane Hackborn自己说:
当有强大的指针时,物体将保持在周围; 一旦最后一个被释放它就会被销毁.使用弱指针可以做的就是比较并试图提升为强指针; 如果对象上没有其他强指针,后者将失败.
这对我来说还不太清楚.强指针是否等同于a(boost::)共享指针?弱指针的作用是什么,只是为了试图将自己推向强指针?比如,我们什么时候需要弱点和强点?
更新:
谢谢大家,但我专门询问有关Android的内核sp和wp,和他们无关,在所有的Java引用.
基本上我试图破解这里的代码http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html
并不真正理解使用sp和wp
更新:
实际答案在于接受答案的评论.感谢Gabe Sechan:
强指针和弱指针是不同的智能指针实现,并且做同样的事情 - 当指针超出范围时,只要至少一个强指针引用它,它就不会被释放.如果只有弱指针(或没有)引用它.每当对其进行强或弱引用时,都会进行检查.
如果我有10个弱引用引用相同的对象,并且其中一个超出范围,该对象将被销毁?虽然有强指针,但只有当它们全部10个超出范围时才会销毁对象?
是的,差不多.如果你只有10个弱指针,当最后一个强指针超出范围时,它可能已经超出了范围.如果有剩余内存,实现可能会允许它延长一点时间,但如果你进入低内存条件它将被切断,并且听起来不像它的实现是从她的引用提前.并且使用它仍然主要是缓存 - 它大致相当于boost shared_ptr和boost weak_ptr.所以基本上,弱指针可以让它引用的对象随时消失.
我有一个基类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)
使析构函数纯虚拟并不能解决问题.出了什么问题?
假设我有一个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多次扩展该类,只是为了对具有稍微不同特征的不同面板进行微小的改动.
我的目标是识别图像中存在的所有形状.这个想法是:
示例图片:

我用它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++实现一个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) 问题是当我需要将它转换为HSV时,CV_BGR2HSV和CV_RGB2HSV给我不同的结果:所以我真的需要知道打开时的颜色顺序是什么,imread或者如何强制imread以任何特定的顺序打开图像.

如果我有课:
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)
最后两行中::符号的完整名称是什么?
我必须定义一个列表,其中:
因此列表是无限的,必须进行排序.加载到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)
有没有人有任何想法解决这个问题?谢谢
这是关于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)