小编Mik*_*ike的帖子

std :: string总是需要堆内存吗?

我有一个简单的问题.我想知道std::string每次在C++中是否分配内存.

在我的代码中,似乎构造函数将使用更多的内存来构造而tst_first_string不是tst_second_string:

 char* first_string = new char[5];
 strcpy(first_string, "test");
 std::string tst_first_string(first_string);
 std::string tst_second_string("test");
Run Code Online (Sandbox Code Playgroud)

c++ memory stdstring

22
推荐指数
2
解决办法
5530
查看次数

Android JobScheduling - 我需要将一个对象传递给我的工作,但是如何?

我想在我的应用程序中使用Androids新的JobScheduler,但是现在我不知道如何传递包含byte应该通过网络发送的数据(数组)的对象.我找了一个答案,但到目前为止找不到我害怕.

我有一个JobService:

public class MyJob extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        new JobTask(this).execute(jobParameters);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }

    private static class JobTask extends AsyncTask<JobParameters, Void,       JobParameters> {
        private final JobService jobService;

        public JobTask(JobService jobService) {
            this.jobService = jobService;
        }

        @Override
        protected JobParameters doInBackground(JobParameters... params) {
            AnotherClass.post(myObject); // where does myObject come from?
            return params[0];
        }

        @Override
        protected void onPostExecute(JobParameters jobParameters) {
            jobService.jobFinished(jobParameters, false);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

......我正在建立这样的工作:

PersistableBundle …
Run Code Online (Sandbox Code Playgroud)

android android-jobscheduler

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

不同语言的数组 - 存储引用或原始对象?

我试图在使用数组时围绕原始内存在不同语言中的样子.

请考虑以下Java代码:

String a = "hi";
String b = "there";
String c = "everyone";
String[] array = {a, b, c};
Run Code Online (Sandbox Code Playgroud)

显然数组是持有引用,而不是对象; 也就是说,在三个引用的内存中存在一个连续的数组,每个引用指向对象所在的内存中的某个其他位置.因此,物体本身不一定坐在三个连续的桶中; 而参考文献是.

现在考虑一下:

String[] array = {"hi", "there", "everyone"}
Run Code Online (Sandbox Code Playgroud)

我想在这种情况下,字符串存在于内存中的所有其他常量,然后数组保存对内存中这些常量的引用?因此,在原始内存中,数组看起来并不像['h', 'i', '\0', 't', 'h', 'e', 'r', 'e'... (etc)].(为方便起见,使用c风格的终止).相反,它更像['a83a3edf' ,'a38decd' ... (etc)]是每个元素都是内存位置(引用).

我从这个思考过程中得出的结论是,在Java中,你永远不能将数组想象成内存中连续对象的桶,而是连续的引用.我想不出有什么方法可以保证对象总是在Java中连续存储.

现在考虑C:

char *a = "hi";
char *b = "there";
char *c = "everyone";
char *array[] = {a, b, c};
Run Code Online (Sandbox Code Playgroud)

上面的代码在功能上等同于上面的Java - 也就是说,数组保存对其他内存位置的引用(指针).与Java一样,指向的对象不一定是连续的.

但是,在以下C代码中:

struct my_struct array[5];  // allocates 5 * size(my_struct) …
Run Code Online (Sandbox Code Playgroud)

c java arrays jvm

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

铿锵的"范围 - 循环 - 分析"诊断是什么?

背景:

请考虑以下示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<bool> vectorBool{false, true};
    for(const auto &element : vectorBool) std::cout << std::boolalpha << element << ' ';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会发出警告:

test.cpp:6:21: warning: loop variable 'element' is always a copy because the range of type 'std::vector<bool>' does not return a reference [-Wrange-loop-analysis]
    for(const auto &element : vectorBool) std::cout << std::boolalpha << element << ' ';
                    ^
test.cpp:6:9: note: use non-reference type 'std::_Bit_reference'
    for(const auto &element : vectorBool) std::cout << std::boolalpha …
Run Code Online (Sandbox Code Playgroud)

c++ clang compiler-warnings copy-elision clang++

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

如何在XML中的TextView中为文本设置两种不同的颜色?

我在TextView中有两个单词:

Hello world.
Run Code Online (Sandbox Code Playgroud)

现在我想要着色world为红色.如何在不使用Java代码的情况下仅在XML本身中执行此操作(不使用Html.fromHtml()它)

android textview

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

C#WinForms System.InvalidCastException

我有一个工具条按钮和两个MDI ChildForms称为C#WinForms应用程序"frmMultiCategoryProject""frmTiebreaker".工具条按钮的Click()事件中会发生不同的操作,具体取决于工具条按钮的Text属性.

这是代码:

    private void tsbtnAddShowTiebreaker_Click(object sender, EventArgs e)
    {
        if (tsbtnAddShowTiebreaker.Text == "Add Tiebreaker" || tsbtnAddShowTiebreaker.Text == "Show Tiebreaker")
        {
            foreach (frmMultiCategoryProject frmamdic in this.MdiChildren)
            {
                frmamdic.SendToBack();
                frmamdic.Hide();
                frmamdic.Visible = false;
            }
            frmTiebreaker frmTB = new frmTiebreaker(Tiebreaker);
            frmTB.MdiParent = this;
            frmTB.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            frmTB.Dock = DockStyle.Fill;
            frmTB.Show();
            tsbtnCloseProject.Visible = true;
            frmTB.BringToFront();
            tsbtnAddShowTiebreaker.Text = "Hide Tiebreaker";
        }
        else if (tsbtnAddShowTiebreaker.Text == "Hide Tiebreaker")
        {
            string strMdiChildren = "";

            foreach (frmTiebreaker frmTB in this.MdiChildren)    // …
Run Code Online (Sandbox Code Playgroud)

c# winforms

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

在调用 qRegisterMetaType 之前是否必须调用 Q_DECLARE_METATYPE?

在排队信号中使用自定义类型的情况下。注册我的自定义类型的正确顺序是什么?

是否有必要调用Q_DECLARE_METATYPE之前qRegisterMetaType

为什么我必须为排队信号而不是直接信号注册自定义类型?

c++ qt

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