小编dec*_*iar的帖子

boost :: shared_ptr语义(复制)

我只想拥有一双新鲜的眼睛,以下代码是正确的:

对象trifoo中包含的指针(存储在ptr_vector中)是共享指针f,g,h.

另外,在trifoo的构造函数中shared_ptr副本的结果是什么; 这是'共享'shared_ptr的正确方法,确保参考计数增加等.我所有其他疑问我能够测试验证,但我不知道如何检查(正确).任何批评也是受欢迎的.

#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/shared_ptr.hpp>

class foo {
    int a, b;
public:
    foo(int A, int B) : a(A), b(B) {}
};

typedef boost::shared_ptr<foo> foo_ptr;

class trifoo {
    foo_ptr c, d, e;
public:
    trifoo(const foo_ptr& C, const foo_ptr& D, const foo_ptr& E) : c(C), d(D), e(E) {}
};

int main() {
    for (int i = 0; i < 5000000; i++) {
        foo_ptr f(new foo(1,2));
        foo_ptr g(new foo(2,3));
        foo_ptr h(new foo(4,5));

        boost::ptr_vector<trifoo> tris;

        tris.push_back(new trifoo(f, g, h));
    }

    return …
Run Code Online (Sandbox Code Playgroud)

c++ boost pointers shared-ptr ptr-vector

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

隐藏'静态'类变量

所以我最近发现了一些使用特定技术的源代码(成语?)我以前没见过; 简而言之; 它不是使用相关类的静态变量,而是在类源文件中使用局部变量.

myclass.h

class myclass {
    //static int myint;

public:
    myclass();
    ~myclass();
    int count();
};
Run Code Online (Sandbox Code Playgroud)

myclass.cpp

#include "myclass.h"

int myint = 0;

myclass::myclass() {
    myint++;
}
myclass::~myclass() {
    myint--;
}

int myclass::count() {
    return myint;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "myclass.h"
#include <iostream>

int main() {
    myclass aclass;
    myclass theclass;

    std::cout << theclass.count(); //outputs 2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么有人会采用这种方法而不是使用静态变量?

我对它的看法是,理想情况下,变量只能为myclass类(私有静态)所知,并且继承根本不重要(在这种情况下),这可能会阻止其他人知道这个变量.但这是我能看到的唯一优势; 不确定这是否值得保证.

同样的问题适用于私有的(静态/非静态)成员函数; 当继承不重要时.

编辑:读完之后,我要做的是因为有些人仍然使用C编程风格...

c++ static-members static-functions

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

找不到与给定名称匹配的资源:attr'colorPrimaryDark'

〜/ myApp/app/build/intermediates/res/merged/debug/values/values.xml:102:错误:错误:找不到与给定名称匹配的资源:attr'colorAccent'.

而且colorPrimary,和colorPrimaryDark.这是一个简单的项目,目标是21+版本.

对于后代,请看我的values/:

价值观/ styles.xml

<resources>
        <style name="AppTheme" parent="android:Theme.Material">
                <item name="colorPrimary">@color/primary</item>
                <item name="colorPrimaryDark">@color/primary_dark</item>
                <item name="colorAccent">@color/accent</item>
        </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

值/ colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <color name="primary">#3F51B5</color>
        <color name="primary_dark">#303F9F</color>
        <color name="accent">#FF4081</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.dcousens.myapplication"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }

    .. snip
}
Run Code Online (Sandbox Code Playgroud)

这个名称下有很多问题,但是它们的分辨率compileSdkVersion至少达到了21个.这已经完成了,错误仍然存​​在.

java android gradle android-layout

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

动态数组初始化

我想创建一个foo的动态数组,项目数为x.参数y和z将传递给项foo的构造函数.我希望做类似的事情:

Foo* bar = new Foo(y, z)[x];
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下编译器错误:

 error: expected `;' before '[' token
Run Code Online (Sandbox Code Playgroud)

因此,在与经验丰富的朋友交谈之后,他给了我这个,他承认这是一种懒惰的做法,但它确实有效.我想知道,有更好/正确的方法吗?

Foo* bar = (Foo*) new int[x];
for (int i = 0; i < x; i++) {
    bar[i] = Foo(y, z);
}
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么random()在cstdlib中有效?(Ubuntu 10.10)

我一直认为cstdlib中的随机函数只是rand和srand,但是下面的工作(在Ubuntu 10.10上使用g ++编译)?

我实际上在从Windows移动到Ubuntu时发现了这一点,我的编译失败了,因为它模糊地重载(我已经声明了我自己的'random()'函数).

#include <cstdlib>
#include <iostream>

using namespace std;

int main() {
 srandom(50);
 cout << random();
 return 0;
};
Run Code Online (Sandbox Code Playgroud)

此外,下面在Ubuntu上正确编译,在检查stdlib.h之后出现,其中,random()和srandom()等未在std命名空间中声明.这使得它成为一个完全痛苦的屁股......

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << random();
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

c++ random overloading ambiguous

0
推荐指数
1
解决办法
1668
查看次数