Вы можете установить поднабор x
, когда в сэмпле будет достигнуто значение 40 «Outs». Попробуйте изменить свою функцию на
Player = function(n) {
x = sample(c("Out","Base"), n , prob = c(.68,.32) ,replace = TRUE)
inds <- cumsum(x == "Out") >= 40
if (any(inds))
x <- x[1:which.max(inds)]
hit_sum = sum(x =="Base")*.20
out_sum = sum(x =="Out")
return(hit_sum)
}
Используйте здесь простой станд.:: auto_ptr, поскольку Вы не можете создать объекты на стеке. И это лучше к Вашей закрытой функции, просто принимают необработанный указатель.
Реальное использование состоит в том, что Вы не должны ловить все возможные исключения и делать руководство удаляет.
На самом деле, если Ваш объект, не изменяет объект и Ваш эхо-сигнал API наверняка, Вы были бы лучше для использования
void privateMethod1(const Foo& fooObj);
и передайте объект туда как
privateMethod1(*fooObj.get());
Одна дальнейшая возможность состоит в том, чтобы создать объект как static_ptr для простоты управления памятью, но просто передать необработанный указатель на другие закрытые методы:
void privateMethod1(Foo *fooObj);
void showSomethingOnTheScreen() {
scoped_ptr<Foo> fooObj(new Foo);
privateMethod1(fooObj.get());
};
Я использовал бы scoped_ptr внутри showSomethingOnTheScreen, но передал бы необработанный указатель (или ссылка) к privateMethod1, например.
scoped_ptr <Нечто> fooObj (новый Foo);
privateMethod1 (fooObj.get ());
Я подозрителен о комментарии, "он пользуется библиотекой, которая не позволяет объекты на стеке, они должны быть на "куче"".
Почему? Это обычно означает, что они должны быть освобождены некоторым специальным способом - поэтому, возможно, ни одно из этих решений не будет работать.
В этом случае только необходимо заменить механизм выделения.
Создайте объект на "куче", но передайте объект как ссылку на закрытые методы.
class A {
private:
void privateMethod1(Foo& fooObj);
public:
void showSomethingOnTheScreen() {
scoped_ptr<Foo> fooObj(new Foo);
privateMethod1(*(fooObj.get()));
};
};