我只想拥有一双新鲜的眼睛,以下代码是正确的:
对象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) 所以我最近发现了一些使用特定技术的源代码(成语?)我以前没见过; 简而言之; 它不是使用相关类的静态变量,而是在类源文件中使用局部变量.
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编程风格...
〜/ 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个.这已经完成了,错误仍然存在.
我想创建一个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) 我一直认为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++ ×4
ambiguous ×1
android ×1
boost ×1
gradle ×1
java ×1
overloading ×1
pointers ×1
ptr-vector ×1
random ×1
shared-ptr ×1